#python #django #sqlite #django-models
Вопрос:
У меня есть много-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
, это рейс с идентификатором=1 и passenger_object
Пассажир с идентификатором=2, когда я запускаю flight_object.passengers.add(passenger_object)
Django, добавляет 2 записи в промежуточную таблицу в базе данных. Теперь таблица выглядит так:
Обе записи с ID=1 и 2 должны быть там, но 3 неверно, и flight_id
внешний ключ предназначен для совершенно другого рейса!
Ответ №1:
Это из-за symmetrical=True
. Вы не должны создавать симметричное ManyToMany
отношение к какой-либо другой модели, кроме self
.
Согласно документам, при использовании symmetrical=True
Django пытается вставить симметричную запись в through
таблицу.