Django Rest Framework:如何使字段为PUT和PATCH之类的更新操作为必需/只读?

时间:2018-12-12 04:11:17

标签: django serialization django-rest-framework deserialization

我有一个Django序列化程序,其字段仅应用于更新操作(例如PUT和PATCH)才需要。但不适用于POST之类的创建操作。

我发现了类似的question,但是关于如何编写自定义验证来检测操作是针对创建,更新还是修补程序,一无所知。

类似地,我想对其他一些字段启用只读(或使其不可编辑),而仅对更新操作启用。

我已经搜索了django rest框架文档,但没有此类自定义验证器的明确示例。

现在,我的解决方法是完全设置required=false

请告知。

2 个答案:

答案 0 :(得分:1)

您可以覆盖get_fields的{​​{1}}方法,然后可以更改该字段的值

serializer

答案 1 :(得分:0)

在这种情况下,我要做的是拥有一个完全不同的序列化程序,该序列化程序从基本序列化程序继承并覆盖相关字段。因此,在这种情况下,这样的方法应该可行:

class CreateSerializer(serializers.Serializers):
    field = serializers.CharField(max_length=100)

class UpdateSerializer(CreateSerializer):
    field = serializers.CharField(max_length=100, required=False)

然后在您看来,返回相关的序列化器:

def get_serializer_class(self):
    if self.request.action == "POST":
        return CreateSerializer
    elif self.request.action in ["PUT", "PATCH"]:
        return UpdateSerializer

我认为这是一个好方法,因为将来您可能需要基于request方法添加其他逻辑。它比猴子修补字段的required属性更具可读性。