我有一个Django序列化程序,其字段仅应用于更新操作(例如PUT和PATCH)才需要。但不适用于POST之类的创建操作。
我发现了类似的question,但是关于如何编写自定义验证来检测操作是针对创建,更新还是修补程序,一无所知。
类似地,我想对其他一些字段启用只读(或使其不可编辑),而仅对更新操作启用。
我已经搜索了django rest框架文档,但没有此类自定义验证器的明确示例。
现在,我的解决方法是完全设置required=false
。
请告知。
答案 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
属性更具可读性。