Frage

Ich habe SO und die Django doc gesucht und scheinen nicht in der Lage zu sein, diese zu finden. Ich erweitere die Basisfunktionalität des django.contrib.comments App das benutzerdefinierte Berechtigungssystem, dass in meinem Webapp zu verwenden. Für die Moderation Aktionen, bin ich versucht, eine klassenbasierte Ansicht zu verwenden, um die grundlegende Abfrage des Kommentars und die Erlaubnis Prüfung auf sie zu handhaben. ( "EComment" in diesem Zusammenhang ist mein "enhanced Kommentar", von der Basis django Kommentar Modell geerbt.)

Das Problem, das ich habe, ist comment_id ist ein kwarg in der urls.py. von der URL übergeben wird Wie rufe ich das richtig aus einer klassenbasierten Ansicht?

Im Moment wird Django den Fehler TypeError: ModRestore() takes exactly 1 argument (0 given) werfen. Code unten enthalten.

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()
War es hilfreich?

Lösung

Sie verwenden keine klassenbasierten Ansicht. Sie schrieb versehentlich def statt class:

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

sollte wohl sein:

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

Andere Tipps

auch, Ihre URL-Muster Bedürfnisse wie folgt aussehen:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top