Pregunta

he buscado SO y el doc Django y parece que no puede ser capaz de encontrar esto. Les extiendo la funcionalidad básica de la django.contrib.comments aplicación para utilizar el sistema de permisos personalizado que hay en mi aplicación web. Para las acciones de moderación, Estoy intentando utilizar una vista basada en la clase para manejar la consulta básica de la observación y comprobación de permisos en él. ( "EComment" en este contexto es mi "comentario mejorado", heredado de la base de Django modelo de comentario.)

El problema que estoy teniendo es un kwarg está siendo pasada en comment_id de la URL en el urls.py. ¿Cómo recupero esto correctamente desde un punto de vista basado en la clase?

En este momento, Django es tirar el TypeError: ModRestore() takes exactly 1 argument (0 given) error. Código que se incluye a continuación.

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

Solución

No está utilizando una visión basada en la clase. Accidentalmente escribió def en lugar de class:

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

probablemente debería ser:

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

Otros consejos

También, sus necesidades patrón de URL aspecto:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top