Django создает лишнюю ненужную запись в промежуточной таблице many-2-many

У меня есть отношение многие-2-многие между рейсом и пассажиром. Когда я пытаюсь назначить пассажира объекту рейса, Django, похоже, добавляет дополнительную запись в промежуточную таблицу.

Вот модели:

class Passenger(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()


class Flight(models.Model):
    time = models.DateTimeField('flight time')
    destination = models.CharField(max_length=20)
    passengers = models.ManyToManyField(
        to=Passenger,
        symmetrical=True,
        related_name='flights',
        blank=True,
    )

Допустим, промежуточная таблица выглядит следующим образом, с пассажиром Intermediate database screenshot

Скажем, flight_object - это рейс с ID=1, а passenger_object - это пассажир с ID=2, когда я запускаю flight_object.passengers.add(passenger_object) Django добавляет 2 записи в промежуточную таблицу в базе данных. Теперь таблица выглядит следующим образом: Screenshot of intermediate table

Обе записи с ID=1 и 2 должны быть там, но 3 неверна, а внешний ключ flight_id предназначен для совершенно другого рейса!

Это происходит из-за symmetrical=True. Вы не должны создавать симметричное отношение ManyToMany к любой модели, кроме self.

Согласно docs, при использовании symmetrical=True, Django пытается вставить симметричную запись в through таблицу.

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