Как назначить существующие контакты на задачу с помощью Postman в Django Rest Framework без дублирования электронной почты

В настоящее время я работаю над проектом, используя Django Rest Framework и Postman. Моя цель - назначить существующие контакты на задачу. Однако, когда я делаю POST-запрос через Postman, я получаю ошибку: "контакт с таким email уже существует"

Поле электронной почты в моей модели Contact определено как models.EmailField(unique=True), поскольку мне нужно, чтобы каждое письмо было уникальным для всех контактов.

Когда я пытаюсь назначить существующий контакт на задачу с помощью POST-запроса, я получаю вышеупомянутую ошибку.

Вот соответствующая часть моего кода:

http://127.0.0.1:8000/tasks/

{
    "id": null,
    "title": "Postman",
    "description": "Postman",
    "dueTo": "2024-06-12T12:04:28Z",
    "created": "2024-06-12T12:04:31Z",
    "updated": "2024-06-12T12:04:34Z",
    "priority": "LOW",
    "category": "TECHNICAL_TASK",
    "status": "TO_DO",
    "subtasks": [
        {
            "id": null,
            "description": "Postman",
            "is_done": false
        }
    ],
    "contacts": [
        {
            "id": 1,
            "email": "max@mueller.com",
            "name": "Max Mueller",
            "phone_number": "123456789",
            "avatar_color": "#abcdef"
        }
    ]
}

models.py

class Contact(models.Model):
    id = models.AutoField(primary_key=True)
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=50)
    phone_number = models.CharField(max_length=30)
    avatar_color = models.CharField(max_length=7)

    def __str__(self):
        return f"{self.name}"

serialzers.py

class ContactSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Contact
        fields = ['id', 'email', 'name', 'phone_number', 'avatar_color']

models.py

class Task(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.TextField()
    description = models.TextField()
    dueTo = models.DateTimeField()
    created = models.DateTimeField()
    updated = models.DateTimeField()
    priority = models.TextField(choices=Priority.choices)
    category = models.TextField(choices=Category.choices)
    status = models.TextField(choices=TaskStatus.choices)
    contacts = models.ManyToManyField(Contact, default=None, related_name='tasks')

serializers.py

class TaskSerializer(serializers.HyperlinkedModelSerializer):
    contacts = ContactSerializer(many=True)
    subtasks = SubtaskSerializer(many=True)

    class Meta:
        model = Task
        fields = ['id', 'title', 'description', 'dueTo', 'created', 'updated', 'priority', 'category', 'status',
                  'subtasks', 'contacts']

Какова наилучшая практика для обработки такого рода сценариев в Django Rest Framework?

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