Question

Je l'ai cherché et semblent si le doc Django et ne peut pas être en mesure de trouver cela. Je l'extension de la fonctionnalité de base du django.contrib.comments application pour utiliser le système d'autorisation personnalisé qui est dans mon webapp. Pour les actions de modération, je tente d'utiliser une vue basée sur la classe pour gérer la base de requêtes le commentaire et l'autorisation de vérifier sur elle. ( "EComment" dans ce contexte est mon "commentaire amélioré", héritée de la base django modèle Commentaire.)

Le problème que je vais avoir est comment_id est un kwarg être passé depuis l'URL dans le urls.py. Comment puis-je récupérer ce bien d'une vue basée sur la classe?

En ce moment, Django est de lancer la TypeError: ModRestore() takes exactly 1 argument (0 given) d'erreur. Code inclus ci-dessous.

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()
Était-ce utile?

La solution

Vous n'utilisez pas une vue basée sur la classe. Vous avez écrit accidentellement def au lieu de class:

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

devrait probablement être:

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

Autres conseils

aussi, votre modèle d'URL doit ressembler à:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top