Вопрос

Я искал так и Django Doc и не могу, кажется, не сможет найти это. Я расширяющую базовую функциональность django.contrib.comments. Приложение для использования системы пользовательской разрешения, которая в моем WebApp. Для медленных действий я пытаюсь использовать представление на основе класса для обработки основных запросов комментариев и проверки разрешений на нее. («Ecomment» в этом контексте является мой «расширенный комментарий», унаследованный от базовой модели комментариев Django.)

Проблема у меня есть comment_id Является ли Kwarg, переданный от URL в URLS.PY. Как мне правильно извлечь это с точки зрения класса?

Прямо сейчас Django бросает ошибку TypeError: ModRestore() takes exactly 1 argument (0 given). Отказ Код включен ниже.

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()
Это было полезно?

Решение

Вы не используете вид на основе класса. Вы случайно написали def вместо class:

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

вероятно, должно быть:

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

Другие советы

Кроме того, ваш узор URL должен выглядеть как:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top