Domanda

Ho cercato SO e il doc Django e non può sembrano essere in grado di trovare questo. Sto estendendo le funzionalità di base del django.contrib.comments app per utilizzare il sistema di autorizzazione personalizzato che è nella mia webapp. Per le azioni di moderazione, sto cercando di utilizzare una visualizzazione di classe-based per gestire l'interrogazione di base del controllo e l'autorizzazione commento su di esso. ( "EComment" in questo contesto è il mio "enhanced commento", ereditato dalla base Django modello di commento.)

Il problema che sto avendo è comment_id è un kwarg viene passato nel dall'URL nel urls.py. Come faccio a recuperare correttamente questo da una visione classista?

In questo momento, Django sta gettando il TypeError: ModRestore() takes exactly 1 argument (0 given) errore. Codice riportato qui di seguito.

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()
È stato utile?

Soluzione

Non si utilizza una vista basata sulle classi. È accidentalmente scritto def invece di class:

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

dovrebbe probabilmente essere:

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

Altri suggerimenti

Inoltre, le vostre esigenze modello url per assomigliare a:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top