我有一个简单的序列化程序,其中有一个必填字段:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
read_only_fields = ('field1', 'field2')
在我的模型中,有一个“ url”字段,用于创建新对象(方法:POST)。我想为PUT方法设置required: False
。我该如何实现?感谢您提供任何线索...
答案 0 :(得分:3)
我假设您想更改/设置现有MyModel实例的一个或多个字段。
在这种情况下,您需要将partial=True
关键字参数传递给序列化程序。然后,即使您在数据中没有url
字段的情况下进行PUT或PATCH操作,您的serializer.is_valid()也会计算为True。
https://www.agiliq.com/blog/2019/04/drf-polls/#edit-a-poll-question应该会有所帮助。
答案 1 :(得分:0)
我发现此答案有帮助:Django Rest Framework set a field read_only after record is created。
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance is not None:
self.fields.get('url').read_only = True
此代码可以正常工作。