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,
)
Допустим, промежуточная таблица выглядит следующим образом, с пассажиром

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

Обе записи с ID=1 и 2 должны быть там, но 3 неверна, а внешний ключ flight_id предназначен для совершенно другого рейса!
Это происходит из-за symmetrical=True. Вы не должны создавать симметричное отношение ManyToMany к любой модели, кроме self.
Согласно docs, при использовании symmetrical=True, Django пытается вставить симметричную запись в through таблицу.