【发布时间】:2021-10-11 10:12:23
【问题描述】:
我有这些序列化程序
class DepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = ('name', 'slug', 'image', 'description')
class DoctorSerializer(serializers.ModelSerializer):
class Meta:
model = Doctor
fields = '__all__'
depth = 1
而当前的表示是这样的:
{
"id": 1,
"first_name": "Jhon",
"last_name": "Doe",
"slug": "jhon-doe",
"email": null,
"phone": null,
"title": null,
"description": "",
"image": "http://localhost:8000/media/studio/default.jpg",
"department": [
{
"id": 1,
"name": "Acupuncture",
"slug": "Acupuncture",
"image": "http://localhost:8000/media/studio/acupuncture-min.jpg",
"description": "Acupuncture"
},
{
"id": 3,
"name": "Cardiology",
"slug": "cardiology",
"image": "http://localhost:8000/media/studio/default.jpg",
"description": "Cardiology"
}
]
}
我想将 department 字段保留为 ID,并为 departmentName 提供一个额外字段,并具有如下表示:
{
"id": 1,
"first_name": "Jhon",
"last_name": "Doe",
"slug": "jhon-doe",
"email": null,
"phone": null,
"title": null,
"description": "",
"image": "http://localhost:8000/media/studio/default.jpg",
"department": [
1,
3
]
"departmentName": [
{
"id": 1,
"name": "Acupuncture",
"slug": "Acupuncture",
"image": "http://localhost:8000/media/studio/acupuncture-min.jpg",
"description": "Acupuncture"
},
{
"id": 3,
"name": "Cardiology",
"slug": "cardiology",
"image": "http://localhost:8000/media/studio/default.jpg",
"description": "Cardiology"
}
]
}
这是因为如果我有第一个表示,我在管理 CRUD 时会遇到问题,因为 department 不是 ID。
问题是因为department 是一个多对多关系,例如,如果它只是一个 ForeignKey,我可以这样做并且它有效。
class DoctorSerializer(serializers.ModelSerializer):
departmentName = serializers.CharField(read_only=True, source="department.name")
class Meta:
model = Doctor
fields = '__all__'
那么,有没有办法通过ManyToManyField 实现这一点?或者我应该使用一个序列化器进行可视化,一个用于添加/编辑?
【问题讨论】:
标签: python django django-rest-framework django-serializer