Можно ли в фреймворке Django rest модифицировать сериализатор, вместо того чтобы принимать 2 списка, чтобы принимать список содержащих их объектов
Я пытаюсь изменить способ приема данных от конечных точек без изменения модели, определенной для них. Следовательно, я хочу изменить сериализатор. Я не уверен, как я должен переопределить его.
У меня есть сериализатор, определенный как
class AssetWorkorderSerializer(MaxenBaseSerializer):
id = ReadOnlyField()
assets = PrimaryKeyRelatedField(
many=True,
read_only=False,
allow_null=False,
queryset=models.Asset.objects.all(),
)
assignee = PrimaryKeyRelatedField(
many=False, read_only=False, allow_null=True, queryset=User.objects.all()
)
checklists = PrimaryKeyRelatedField(
many=True, read_only=False, queryset=Checklist.objects.all()
)
assigned_by = PrimaryKeyRelatedField(
many=False, queryset=User.objects.all())
deadline = ReadOnlyField()
overdue = ReadOnlyField()
class Meta:
model = models.AssetWorkorder
fields = "__all__"
Итак, принятыми объектами являются:
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"url": "https://<some-url>/assetworkorders/29/",
"id": 29,
"assets": [
292,
293
],
"assignee": 33,
"checklists": [
7,
8,
9
],
"assigned_by": 32,
"deadline": "2022-03-31",
"overdue": true,
"created": "2022-03-31T03:52:59.123745Z",
"updated": "2022-03-31T17:18:49.599963Z",
"name": "Service HVACs",
"description": "Service HVACs",
"status": "OP",
"priority": "LO",
"duedate": "2022-03-31",
"scheduleddate": "2022-03-30",
"notifications_enabled": false
},
]
}
Вместо этого я хочу принимать следующим образом:
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"url": "https://<some-url>/assetworkorders/29/",
"id": 29,
"assetChecklist": [
{"asset": 292, "checklists": [7,8]},
{"asset": 293, "checklists": [8,9]},
],
"assignee": 33,
"assigned_by": 32,
"deadline": "2022-03-31",
"overdue": true,
"created": "2022-03-31T03:52:59.123745Z",
"updated": "2022-03-31T17:18:49.599963Z",
"name": "Service HVACs",
"description": "Service HVACs",
"status": "OP",
"priority": "LO",
"duedate": "2022-03-31",
"scheduleddate": "2022-03-30",
"notifications_enabled": false
},
]
}
Без модификации модели.
Я уже модифицирую метод create, я перезапишу его снова, чтобы сохранить данные как есть.