gpt4 book ai didi

python - patch() 得到了意外的关键字参数

转载 作者:行者123 更新时间:2023-12-01 00:08:19 26 4
gpt4 key购买 nike

我正在尝试编写一个测试,其中使用 patch 更新对象。

class Search(models.Model):
id_search = models.AutoField(primary_key=True)
id_user = models.IntegerField(null=False)
.
.
archive = models.BooleanField(default=False)
 def test_archive_search(self):

user = User(id_user=75720912,
login='Client:75720912',
)
user.save()

search = Search(
id_user=75720912,
.
.
archive=False
)
search.save()

url = reverse('search-update', kwargs={'id_search':1})
data = {'archive': True}
response = self.client.patch(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
url(r'^search-update/(?P<id_search>\d+)$', SearchUpdateView.as_view(), name='search-update')

class SearchUpdateView(generics.UpdateAPIView):
serializer_class = SearchSerializer
def get_object(self,id_search):
return Search.objects.get(id_search=id_search)

def patch(self, request):
id_search = self.request.query_params.get('id_search', None)

search_object = self.get_object(id_search=id_search)
serializer = SearchSerializer(search_object, data=request.data, partial=True)

if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)

并收到此错误:

TypeError: patch() got an unexpected keyword argument 'id_search'

有趣的是,当 url 为:

url(r'^search-update/$', SearchUpdateView.as_view(), name='search-update')

SearchUpdateView 使用给定的查询参数可以正常工作。

编辑

我发现在测试时将id_search传递给patch可以解决这个问题,但它会破坏工作 View 。

class SearchUpdateView(generics.UpdateAPIView):
serializer_class = SearchSerializer
def get_object(self, id_search):
return Search.objects.get(id_search=id_search)

def patch(self, request, id_search):
#id_search = self.request.query_params.get('id_search', None)


search_object = self.get_object(id_search=id_search)
serializer = SearchSerializer(search_object, data=request.data, partial=True)

if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)

我仍然不知道如何将它们组合在一起。

最佳答案

如果您以这种方式定义 url,则 patch 方法将获取 id_search 参数作为关键字参数,如错误所示。

相反,您将检索它,就像它作为查询参数一样,即不是 url 路径的一部分,而是作为 search-update?id_search=

鉴于您在获取时将 None 作为默认值传递,因此当您省略它时它会起作用。

所以选择你想要走的路。

如果 url 定义正确,则将 id_search 参数添加到 patch 方法的签名中并删除手动检索它的代码。

或者按照上面评论中的建议,通过为参数分配默认值 None 并从请求中检索它(如果它不是路径的一部分)来执行这两项操作

关于python - patch() 得到了意外的关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59797063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com