Как решить ошибку с нулевым полем в Django при создании задачи с подзадачами и пользователями

Я сталкиваюсь с проблемами при попытке создать задачу с подзадачами и пользователями в моем Django-приложении. Создание задачи не удается из-за ошибок валидации, в частности, полей subtasks и users. Вот полезная нагрузка, которую я отправляю на бэкэнд:

{
    "id": null,
    "title": "aa",
    "description": "aaaa",
    "due_to": "2024-06-27T22:00:00.000Z",
    "created": null,
    "updated": null,
    "priority": "LOW",
    "category": "TECHNICAL_TASK",
    "status": "TO_DO",
    "subtasks": [
        {
            "task_id": null,
            "description": "s1",
            "is_done": false
        },
        {
            "task_id": null,
            "description": "s2",
            "is_done": false
        }
    ],
    "users": [
        {
            "id": 6
        },
        {
            "id": 7
        }
    ]
}

При попытке создать задачу я получаю следующее сообщение об ошибке от бэкенда:

{
    "subtasks": [
        {
            "task_id": [
                "This field may not be null."
            ]
        },
        {
            "task_id": [
                "This field may not be null."
            ]
        }
    ],
    "users": [
        {
            "email": [
                "This field is required."
            ],
            "password": [
                "This field is required."
            ],
            "name": [
                "This field is required."
            ]
        },
        {
            "email": [
                "This field is required."
            ],
            "password": [
                "This field is required."
            ],
            "name": [
                "This field is required."
            ]
        }
    ]
}

Я подозреваю, что проблема связана с тем, как я обрабатываю вложенные сериализаторы и модельные отношения в моем Django-приложении. Я использую Django Rest Framework (DRF) для обработки сериализации и десериализации данных.

Вот мой соответствующий код:

serializers.py

models.py

Когда вы начинаете переписывать create validate с помощью drf, если только это не абсолютно оправдано (довольно нишево), вы нарушаете шаблоны, которые DRF хочет, чтобы вы использовали.

В вашем случае DRF ведет себя по-разному с patch и put и post и т.д...

для вложенных отношений необходимо указать вложенный сериализатор, например:

    Non-nested: task_id = serializers.IntegerField(write_only=True, required=False)
    Nested:     task = TaskSerializer(required=False)

Наконец-то:

Пишите юниттесты, чтобы изолировать и протестировать интересующую вас функциональность, напишите минимальный вертикальный кусочек того, что вам нужно, и протестируйте его, затем увеличивайте масштаб, не пытайтесь сделать все сразу.

Один из ключевых выводов заключается в том, что унитесты могут казаться утомительными, но они всегда экономят время как в краткосрочной, так и в долгосрочной перспективе, поскольку позволяют избежать подобных головных болей.

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