Django Rest Framework,TypeError:__init__() 采用 1 个位置参数,但给出了 2 个

Hah*_*n't 2 django django-rest-framework

模型.py:

\n\n
  class Bookmark(models.Model):\n    """Bookmar for a quiz"""\n    quiz = models.ForeignKey(\n        Quiz,\n        on_delete=models.PROTECT,\n        verbose_name=\'\xd0\x92\xd0\xb8\xd0\xba\xd1\x82\xd0\xbe\xd1\x80\xd0\xb8\xd0\xbd\xd0\xb0\',\n        related_name=\'bookmarks\'\n    )\n    user = models.ForeignKey(\n        settings.AUTH_USER_MODEL,\n        on_delete=models.CASCADE,\n        verbose_name=\'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c\',\n        related_name=\'bookmarks\'\n    )\n    date = models.DateTimeField(auto_now_add=True, verbose_name=\'\xd0\x94\xd0\xb0\xd1\x82\xd0\xb0 \xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f\')\n\n    def __str__(self):\n        return f\'{self.user} - {self.quiz}\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

网址.py:

\n\n
urlpatterns = [\n    path(\'quiz/bookmark/create-remove/<slug:slug>/\', views.CreateRemoveBookmarkAPI,\n        name="bookmark-create-remove-api"),\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

视图.py:

\n\n
class CreateRemoveBookmarkAPI(APIView):\n    """API for create or remove quiz bookmark.\n    Get a quiz slug, and create or remove bookmark at it\n    """\n    permission_classes = (IsAuthenticated,)\n\n    def post(self, request, slug):\n        quiz = get_object_or_404(Quiz, slug=slug)\n        bookmark = Bookmark.objects.filter(quiz=quiz, user=request.user)\n        data = {}\n\n        if bookmark.exists():\n            bookmark.delete()\n            data[\'bookmarked\'] = False\n        else:\n            Bookmark.objects.create(quiz=quiz, user=request.user)\n            data[\'bookmarked\'] = True\n\n        data[\'bookmarks\'] = quiz.get_bookmarks_count()\n\n        return Response(data, status=status.HTTP_200_OK)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到了它:

\n\n
Internal Server Error: /api/quiz/bookmark/create-remove/dd-69/\nTraceback (most recent call last):\n  File "C:\\Users\\user\\Desktop\\quizapp\\venv\\lib\\site-packages\\django\\core\\handlers\\exception.py", line 34, in inner\n    response = get_response(request)\n  File "C:\\Users\\user\\Desktop\\quizapp\\venv\\lib\\site-packages\\django\\core\\handlers\\base.py", line 115, in _get_response\n    response = self.process_exception_by_middleware(e, request)\n  File "C:\\Users\\user\\Desktop\\quizapp\\venv\\lib\\site-packages\\django\\core\\handlers\\base.py", line 113, in _get_response\n    response = wrapped_callback(request, *callback_args, **callback_kwargs)\nTypeError: __init__() takes 1 positional argument but 2 were given\n[05/Mar/2020 12:04:33] "POST /api/quiz/bookmark/create-remove/dd-69/ HTTP/1.1" 500 21733\n
Run Code Online (Sandbox Code Playgroud)\n\n

在前端,我只是发送ajax请求。数据属性为空,因为它不重要。\n我不知道为什么它不起作用。请帮我。

\n

Mah*_*del 9

您没有as_view()在网址中调用函数

urlpatterns = [
    path('quiz/bookmark/create-remove/<slug:slug>/', views.CreateRemoveBookmarkAPI.as_view(),
        name="bookmark-create-remove-api"),
]
Run Code Online (Sandbox Code Playgroud)