Django Rest Framework,TypeError:__init __()接受1个位置参数,但给出了2个

时间:2020-03-05 08:14:53

标签: django django-rest-framework

Models.py:

  class Bookmark(models.Model):
    """Bookmar for a quiz"""
    quiz = models.ForeignKey(
        Quiz,
        on_delete=models.PROTECT,
        verbose_name='Викторина',
        related_name='bookmarks'
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        verbose_name='Пользователь',
        related_name='bookmarks'
    )
    date = models.DateTimeField(auto_now_add=True, verbose_name='Дата добавления')

    def __str__(self):
        return f'{self.user} - {self.quiz}'

Urls.py:

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

Views.py:

class CreateRemoveBookmarkAPI(APIView):
    """API for create or remove quiz bookmark.
    Get a quiz slug, and create or remove bookmark at it
    """
    permission_classes = (IsAuthenticated,)

    def post(self, request, slug):
        quiz = get_object_or_404(Quiz, slug=slug)
        bookmark = Bookmark.objects.filter(quiz=quiz, user=request.user)
        data = {}

        if bookmark.exists():
            bookmark.delete()
            data['bookmarked'] = False
        else:
            Bookmark.objects.create(quiz=quiz, user=request.user)
            data['bookmarked'] = True

        data['bookmarks'] = quiz.get_bookmarks_count()

        return Response(data, status=status.HTTP_200_OK)

我明白了:

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

在前端,我只是发送ajax请求。 data属性为空,因为没有关系。 我不知道为什么它不起作用。请帮助我。

1 个答案:

答案 0 :(得分:0)

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

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