是否可以在Django中向方法体添加非模型字段?

问题描述 投票:0回答:1

是否可以将非模型字段添加到PATCH主体?我们以我想要更改用户密码为例。在我的模型中我只有字段password但是在PATCH中我想添加old_password来验证用户,然后从body更新密码来自password字段。有任何想法吗?我找到了SerializerMethodField,但我不确定是否有可能做我上面所描述的。

python django python-3.x django-models django-rest-framework
1个回答
0
投票

您只需将字段添加到序列化程序即可

class MyPatchSerializer(...):
    old_password = serializers.CharField(...)
    fields = [..., 'old_password']

如果你想验证这个字段,只需添加一个validate_old_pasword(self, value)到你的序列化器,docs

然后在你的viewset类中你需要覆盖get_serializer_classdocs),这样你告诉DRF如果用户发送PUT / PATCH请求而不是默认的序列化器,你应该使用MyPatchSerializer

class MyViewSet(...):
    ...

    def get_serializer(self):
        if self.action in ('update', 'partial_update'):
            return MyPatchSerializer
        return self.serializer_class
© www.soinside.com 2019 - 2024. All rights reserved.