سؤال

لقد بحثت في ذلك و Django Doc ولا يمكن أن يكون قادرًا على العثور على هذا. أقوم بتمديد الوظيفة الأساسية لـ django.contrib.com تطبيق لاستخدام نظام الإذن المخصص الموجود في الويب الخاص بي. لإجراءات الاعتدال ، أحاول استخدام طريقة عرض قائمة على الفصل للتعامل مع الاستعلام الأساسي للتعليق والتحقق من الإذن عليه. ("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