views:

109

answers:

1

I've searched SO and the Django doc and can't seem to be able to find this. I'm extending the base functionality of the django.contrib.comments app to use the custom permission system that's in my webapp. For the moderation actions, I'm attempting to use a class-based view to handle the basic querying of the comment and permission checking on it. ("EComment" in this context is my "enhanced comment", inherited from the base django Comment model.)

The problem I'm having is comment_id is a kwarg being passed in from the URL in the urls.py. How do I retrieve this properly from a class-based view?

Right now, Django is throwing the error TypeError: ModRestore() takes exactly 1 argument (0 given). Code included below.

urls.py

url(r'restore/(?P<comment_id>.+)/$', ModRestore(), name='ecomments_restore'),

views.py

def ECommentModerationApiView(object):

    def comment_action(self, request, comment):
        """
        Called when the comment is present and the user is allowed to moderate.
        """
        raise NotImplementedError

    def __call__(self, request, comment_id):
        c = get_object_or_404(EComment, id=comment_id)
        if c.can_moderate(request.user):
            comment_action(request, c)
            return HttpResponse()
        else:
            raise PermissionDenied

def ModRestore(ECommentModerationApiView):
    def comment_action(self, request, comment):
        comment.is_removed = False
        comment.save()
A: 

You are not using a class-based view. You accidentally wrote def instead of class:

def ECommentModerationApiView(object):
...
def ModRestore(ECommentModerationApiView):

should probably be:

class ECommentModerationApiView(object):
...
class ModRestore(ECommentModerationApiView):
stefanw
Oh man.... I think it's time to go home for the day.
T. Stone