Kwargs y puntos de vista basados en la clase en Django
-
24-09-2019 - |
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()
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'),