【问题标题】:DRF ModelSerializer make all fields Read Only without specifying them explicitelyDRF ModelSerializer 使所有字段只读而不明确指定它们
【发布时间】:2019-08-13 10:25:36
【问题描述】:

我能够制作只读模型序列化程序,例如:

class FooSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foo
        fields = ['name', 'ratio']
        read_only_fields = fields

但是,我倾向于经常在Foo 中添加/删除字段。每次修改Foo 时不更新我的序列化程序会容易得多。 fields = '__all__' 非常方便:

class FooSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foo
        fields = '__all__'
        read_only_fields = fields

但是,read_only_fields 不接受 __all__ 作为有效选项并引发此异常:

Exception Type: TypeError at /api/foo/
Exception Value: The `read_only_fields` option must be a list or tuple. Got str.

如何在不明确将每个字段添加到read_only_fields 列表的情况下将所有字段标记为只读?

【问题讨论】:

    标签: python-3.x serialization django-models django-rest-framework


    【解决方案1】:

    您可以像这样扩展get_fields 方法:

    def get_fields(self):
        fields = super().get_fields()
        for field in fields.values():
            field.read_only = True
        return fields
    

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2019-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多