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
таблицу.