Как решить ошибку с нулевым полем в 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)
Наконец-то:
Пишите юниттесты, чтобы изолировать и протестировать интересующую вас функциональность, напишите минимальный вертикальный кусочек того, что вам нужно, и протестируйте его, затем увеличивайте масштаб, не пытайтесь сделать все сразу.
Один из ключевых выводов заключается в том, что унитесты могут казаться утомительными, но они всегда экономят время как в краткосрочной, так и в долгосрочной перспективе, поскольку позволяют избежать подобных головных болей.