python-3.x - DRF ModelSerializer 使所有字段只读,而无需明确指定它们

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

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

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/

相关文章:

Python 3 : How can I get os. getcwd() 与 re.sub() 配合得很好吗?

python - 使用 fastText 执行示例代码时遇到问题

python - 使用 Python ftplib ftp.dir() 或 ftp.retrlines ('LIST' ) 仅返回包含字符串的文件

c# - 序列化和发送 Protocol Buffers 消息

django - 在Django模板中访问元组

django - 如何在管理中使用 contenttypes 自定义模型的显示?

python - 如何制作迭代器集

java - 在 Java 中将子类设置为不可序列化

java - Java中如何保存对象?构造函数中的反序列化

python - 提供唯一 ID 时超出最大递归深度