CreateModelMixin TypeError: __init __ () принимает 1 позиционный аргумент, но 2 были заданы - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь вставить новую строку в таблицу из 2 столбцов, где один столбец ссылается на аутентифицированного пользователя (модель ссылается на модель пользователя через FK), а другой - на переменную, переданную через URL.

urls.py


url('^(?P<update>-?\d+.?\d+)/$', views.UpdateViewSet)

views.py


class UpdateViewSet(mixins.CreateModelMixin,viewsets.GenericViewSet):
    permission_classes = (IsAuthenticated,)  
    serializer_class = serializers.UpdateSerializer
    def create(self,request,*args, **kwargs):
        update = self.kwargs['update']
        return self.create(user=self.request.user,update=update)

Traceback

 File "\Backend\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "\Backend\env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "\Backend\env\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
class Update(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    update = models.DecimalField(decimal_places=5,max_digits=6)

Ответы [ 2 ]

4 голосов
/ 13 июня 2019

Поскольку вы используете представления на основе классов - [Django Doc] , вы должны были позвонить as_view() - [Django Doc]

url('^(?P<update>-?\d+.?\d+)/$', views.UpdateViewSet<b>.as_view({"post":"create"})</b>)

Update-1

Измените ваше представление, как показано ниже,

<b>from rest_framework.response import Response</b>


class UpdateViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.UpdateSerializer

    <b>def create(self, request, *args, **kwargs):
        update_instance = Update.objects.create(user=request.user, update=self.kwargs['update'])
        return Response(self.get_serializer(update_instance).data)</b>
1 голос
/ 13 июня 2019

Я думаю, что вы неправильно настраиваете URL, сделайте так:

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'update', views.UpdateViewSet, basename='update')
urlpatterns = router.urls

или

 url(r'^(?P<update>-?\d+.?\d+)/$', views.UpdateViewSet.as_view(actions={'post': 'create'}))
...