【问题标题】:CreateModelMixin TypeError: __init__() takes 1 positional argument but 2 were givenCreateModelMixin TypeError: __init__() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2019-10-27 16:21:01
【问题描述】:

我正在尝试将新行插入到 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)

追溯

 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)

【问题讨论】:

标签: django django-rest-framework django-rest-viewsets


【解决方案1】:

既然你使用class-based views--[Django Doc],你应该打电话给as_view()--[Django Doc]

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

更新-1

改变你的看法如下,

from rest_framework.response import Response


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

    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)

【讨论】:

  • TypeError: create() missing 1 required positional argument: 'request'
  • 我也修复了这个问题,现在我看到 TypeError: create() missing 1 required positional argument: 'request'
  • 你想用self.create(user=self.request.user,update=update)这行代码做什么?你能澄清一下吗?
  • Update 模型有两个字段,一个是 User 模型的 FK,另一个是更新值。我正在尝试使用经过身份验证的用户和更新值插入记录。
  • 你能添加那个模型吗?
【解决方案2】:

我认为你的 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'}))

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2023-03-03
    • 2015-07-13
    • 2018-06-21
    • 2014-11-12
    相关资源
    最近更新 更多