Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从django rest框架url获取参数值时出现问题_Python_Django_Django Rest Framework - Fatal编程技术网

Python 从django rest框架url获取参数值时出现问题

Python 从django rest框架url获取参数值时出现问题,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个django项目,它有一个API视图。api视图与一个url相关联,该url接受url中的一个参数和?在参数中。我试图抓住url中的参数,它是widget\u id,将其用作过滤器。我遇到了一个错误 视图: 网址: URL参数作为命名参数传递给方法(get、post、put等): def put(self,request,pk,widget_id,format=None): user\u id=self.request.query\u params.get('user\u id')) u

我有一个django项目,它有一个API视图。api视图与一个url相关联,该url接受url中的一个参数和?在参数中。我试图抓住url中的参数,它是
widget\u id
,将其用作过滤器。我遇到了一个错误

视图:

网址:


URL参数作为命名参数传递给方法(
get
post
put
等):

def put(self,request,pk,widget_id,format=None):
user\u id=self.request.query\u params.get('user\u id'))
user\u widget=PersonWidgetDefinition.objects.all()\
.filter(widget\u definition\u id=widget\u id,person\u id=user\u id).count()
如果用户_widget==0:
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 201\u已创建)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u请求)
如果用户_widget==1:
request.data.user\u widget=True
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 202\u接受)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u REQUEST)

但是,您可能需要检查,看看某个通用视图是否符合视图的需要。通常这可以显著减少样板代码的数量。

URL参数作为命名参数传递给方法(
get
post
put
,等等):

def put(self,request,pk,widget_id,format=None):
user\u id=self.request.query\u params.get('user\u id'))
user\u widget=PersonWidgetDefinition.objects.all()\
.filter(widget\u definition\u id=widget\u id,person\u id=user\u id).count()
如果用户_widget==0:
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 201\u已创建)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u请求)
如果用户_widget==1:
request.data.user\u widget=True
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 202\u接受)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u REQUEST)
但是,您可能需要检查,看看某个通用视图是否符合视图的需要。通常,这可以显著减少样板代码的数量

def put(self, request, pk, format=None):
        widget_id = self.kwargs.get('widget_id')
        user_id = self.request.query_params.get('user_id')
        user_widget = PersonWidgetDefinition.objects.all()\
            .filter(widget_definition_id=widget_id, person_id=user_id).count()
        if user_widget == 0:
            serializer = PersonWidgetDefinitionSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        if user_widget == 1:
            request.data.user_widget = True
            serializer = PersonWidgetDefinitionSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    path('widgets/<int:widget_id>/user/', UserWidgetView.as_view(), name='user-widget'),

TypeError at /api/v2/widgets/1/user/
put() got an unexpected keyword argument 'widget_id'
def put(self, request, pk, widget_id, format=None):
        user_id = self.request.query_params.get('user_id')
        user_widget = PersonWidgetDefinition.objects.all()\
            .filter(widget_definition_id=widget_id, person_id=user_id).count()
        if user_widget == 0:
            serializer = PersonWidgetDefinitionSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        if user_widget == 1:
            request.data.user_widget = True
            serializer = PersonWidgetDefinitionSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)