django-models - DRF 序列化程序获取/发布/删除工作但“放置”失败
问题描述
我正在尝试为“项目”模型实现一个基本的 CRUD API。它在大多数情况下都有效,但我遇到了 put 方法似乎是一个小问题。我已经通过调试器多次运行它,所以我知道序列化程序至少部分功能,但似乎“更新”序列化程序方法没有成功更新我的数据库。这是视图:
def put(self, request, *args, **kwargs):
item = Item.objects.get(id=request.data["id"])
serializer = ItemSerializer(item, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是序列化程序:
class ItemSerializer(serializers.ModelSerializer):
"""
Item Serializer
"""
class Meta:
model = Item
fields = "__all__"
lookup_field = "id"
def update(self, instance, validated_data):
instance.name = validated_data.get("name", instance.name)
instance.description = validated_data.get(
"description", instance.description)
instance.price = validated_data.get("price", instance.price)
instance.discount = validated_data.get("discount", instance.discount)
instance.quantity = validated_data.get("quantity", instance.quantity)
instance.category = validated_data.get("category", instance.category)
instance.save()
return instance
这是我用来调试问题的测试(到目前为止没有成功):
def test_update_item(self):
self.client.force_authenticate(self.team_member)
self.team_member.is_staff = True
res = self.client.put(
ITEMS_API,
{
"id": self.hat.id,
"name": "Bucket Hat",
"description": "Exclusive bucket hat"
},
)
self.assertEquals(res.status_code, 200)
self.assertEquals(hat.name, "Bucket Hat")
解决方案
推荐阅读
- three.js - 三JS编辑器中使用场景的用户数据
- javascript - 在不提供网页的情况下使用 npm 测试 javascript 代码
- javafx - HelloFX.java:1:错误:包 javafx.application.Application 不存在
- mysql - 如何从mysql中的重复数据中只选择一个数据?
- python - 无法在 Visual Studio 代码中安装 twilio
- javascript - 设置 Socket.io 房间变量
- python - 在 python 中下载批量图像
- integration - 带有动态域名的 Docusign 重定向 url
- html - 将 django Authentication 表单与 html 表单一起使用
- python - 如何从查询集中删除而不删除Django中的原始模型本身