我能够制作只读模型序列化程序,例如:
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
列表?
最佳答案
您可以扩展 get_fields
像这样的方法:
def get_fields(self):
fields = super().get_fields()
for field in fields.values():
field.read_only = True
return fields
关于python-3.x - DRF ModelSerializer 使所有字段只读,而无需明确指定它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475808/