【发布时间】:2021-07-24 00:31:48
【问题描述】:
我正在使用 Django、Django Rest Framework 开发 API,并尝试实现这些(广告描述)
第一个序列化器
class DeviceConfigSerializer(serializers.ModelSerializer):
config = serializers.JSONField(initial={})
context = serializers.JSONField(initial={})
templates = FilterTemplatesByOrganization(many=True)
class Meta:
model = Config
fields = ['backend', 'status', 'templates', 'context', 'config']
extra_kwargs = {'status': {'read_only': True}}
现在我有两个嵌套的序列化程序,其中包含LIST 和DETAIL 端点的上述序列化程序:-
第二个序列化器
class DeviceListSerializer(FilterSerializerByOrgManaged, serializers.ModelSerializer):
config = DeviceConfigSerializer(write_only=True, required=False)
class Meta(BaseMeta):
model = Device
fields = ['id','name','organization','mac_address','key','last_ip','management_ip',
'model', 'os', 'system', 'notes', 'config', 'created', 'modified',]
第三个序列化器
class DeviceDetailSerializer(BaseSerializer):
config = DeviceConfigSerializer(allow_null=True)
class Meta(BaseMeta):
model = Device
fields = ['id','name','organization','mac_address','key','last_ip','management_ip',
'model','os','system','notes','config','created','modified',]
现在,我对List 和Detail 端点使用相同的DeviceConfigSerializer 序列化程序,但是对于列表端点,我将嵌套序列化程序设置为write_only=True,但是我想用列表端点DeviceListSerializer serilaizer 是来自DeviceConfigSerializer 的所有字段中,我希望status 和backend 字段同时是read 和write,其他字段为write_only。
目前使用此配置,我收到来自DeviceListSerializer 的回复,如下所示:-
{
"id": "12",
"name": "tests",
"organization": "-------",
"mac_address": "-------",
"key": "------",
"last_ip": null,
"management_ip": null,
"model": "",
"os": "",
"system": "",
"notes": "",
"created": "2021-04-26T10:41:25.399160+02:00",
"modified": "2021-04-26T10:41:25.399160+02:00"
}
我想要实现的是:-
{
"id": "12",
"name": "tests",
"organization": "----",
"mac_address": "-----",
"key": "----",
"last_ip": null,
"management_ip": null,
"model": "",
"os": "",
"system": "",
"notes": "",
"config": {
"status": "...",
"backend": "...",
,}
"created": "2021-04-26T10:41:25.399160+02:00",
"modified": "2021-04-26T10:41:25.399160+02:00"
}
PS:我尝试为这两个字段引入一个额外的序列化程序并将其嵌套到DeviceListSerializer,但我不想为这两个字段引入一个额外的序列化程序,并期待这是否可以实现同一个嵌套序列化器。
- 每个设备实例都包含
config。
简而言之:-
我正在尝试对DeviceListSerilaizer 和DeviceDetailSerializer 使用相同的DeviceConfigSerializer。但是对于DeviceListSerializer,我希望DeviceConfigSerializer 中的status 和backend 字段既可以读取又可以写入,目前设置为只为DeviceListSerializer 写入。
【问题讨论】:
标签: django api django-rest-framework django-serializer