Pergunta

Eu procurei assim e o Doc Doc e não consigo encontrar isso. Estou estendendo a funcionalidade base do django.contrib.commentos App para usar o sistema de permissão personalizado que está no meu webApp. Para as ações de moderação, estou tentando usar uma visualização baseada em classe para lidar com a consulta básica do comentário e permissão verificando. ("Ecomment" neste contexto é o meu "comentário aprimorado", herdado do modelo de comentário da base django.)

O problema que estou tendo é comment_id é um kwarg que está sendo passado do URL no urls.py. Como faço para recuperar isso corretamente de uma visão baseada em classe?

No momento, Django está jogando o erro TypeError: ModRestore() takes exactly 1 argument (0 given). Código incluído abaixo.

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()
Foi útil?

Solução

Você não está usando uma visualização baseada em classe. Você escreveu acidentalmente def ao invés de class:

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

provavelmente deveria ser:

class ECommentModerationApiView(object):
...
class ModRestore(ECommentModerationApiView):

Outras dicas

Além disso, seu padrão de URL precisa parecer:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top