【发布时间】:2018-08-18 02:52:45
【问题描述】:
我正在使用 DRF 并且有一个序列化的模型。有时我想在发送到 api 端点的数据中包含所有字段,有时我只需要属性的子集(例如列表视图与编辑视图)。是否可以在一个序列化器中声明所有字段,然后在调用序列化器时只指定一个子集。
这是我想做的一个例子:
queryset = Foo.objects.filter(active=True)
FooSerializer(queryset, many=True, fields=["id", "title"])
然后我可以使用这个输出来填充 HTML 选择元素的选项。
同时FooSerializer 看起来像这样:
类
FooSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = ProgressNoteCustomType
fields = ( 'id', 'title', 'modified', 'active', 'user' )
read_only_fields = ['id']
虽然我可以编写另一个序列化程序,它在Meta 定义中只有id 和title 字段,但它不是DRY。
然后我有另一个场景,我想显示一个列表视图,用户可以在其中单击一个项目并对其进行编辑 - 这里我只想显示 title、modified 和 active。写FooSerializer(queryset, many=True, fields=["id", "title", "active"]) 之类的内容似乎是合适的解决方案,但无效。
我真的想避免为这 3 种不同的场景使用 3 种不同的序列化(其中常规 FooSerializer(instance) 是编辑/查看默认值,它返回序列化程序中定义的所有字段)
【问题讨论】:
标签: django django-rest-framework django-serializer