Django REST Fram中的PUT和PATCH没有区别

2024-04-29 11:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的简单视图集和序列化程序类:

class UserSerializer(ModelSerializer):

    class Meta:
        model = User
        fields = ['id', 'email', 'first_name', 'last_name']

....    

class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

假设我只想更新用户的名字。在这种情况下,我应该使用PATCH{"first_name": "New First Name"}。但同时,看起来PUT{"first_name": "New First Name"}也以同样的方式工作,尽管它不应该这样,因为它必须验证是否指定了所有字段。至少我是这么想的。我错了吗?如果我是,那么Django Rest框架中的update和{}之间有什么区别,有没有理由保留这两个(因为任何附加的方法都意味着额外的测试,所以后一个问题有点哲学,因为看起来人们觉得这个PUT/PATCH对真的很混乱)。顺便说一下,我用的是djangorestframework==3.8.2。谢谢您。在


Tags: name程序new序列化putmetaclasspatch
1条回答
网友
1楼 · 发布于 2024-04-29 11:36:04

如果您查看生成的序列化程序,您会发现您没有必需的字段。在这种情况下,PUT和PATCH将有类似的行为。 如果有任何必填字段,您会看到区别。在

serializer = UserSerializer(instance=user, data={"first_name": "New First"})
print(serializer)                                                                                                                                                                                  

    UserSerializer(data={'first_name': 'New First'}, instance=<User: tester>):
        id = IntegerField(label='ID', read_only=True)
        email = EmailField(allow_blank=True, label='Email address', max_length=254, required=False)
        first_name = CharField(allow_blank=True, max_length=30, required=False)
        last_name = CharField(allow_blank=True, max_length=150, required=False)

相关问题 更多 >