Можно ли в фреймворке 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, я перезапишу его снова, чтобы сохранить данные как есть.

Вернуться на верх