Django REST序列化程序必填字段

时间:2019-05-05 09:29:42

标签: django-rest-framework

我有一个简单的序列化程序,其中有一个必填字段:

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'
        read_only_fields = ('field1', 'field2')

在我的模型中,有一个“ url”字段,用于创建新对象(方法:POST)。我想为PUT方法设置required: False。我该如何实现?感谢您提供任何线索...

2 个答案:

答案 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

此代码可以正常工作。