@E170CF34

Как сформировать правильные связи в базе данных django?

Добрый день,

Помогите определить тип связей в базе данных.
Имеются две таблицы: "Engine" и "Aircraft_fleet".
У Aircraft может быть только два Engine (каждый из них разный), конкретный Engine может принадлежать только одному Aircraft.
Нужно каким-то образом связать поля Engine_1_Ser_Num и Engine_2_Ser_Num в Aircraft с полем Ser_Num таблицы Engine.

Сложность в том, что в таблице Engine для каждого Ser_Num всегда множество записей:
63da2e729b41e536295838.jpeg

Какой тип связи будет самым удачным?

class Engine(models.Model):
    Ser_Num = models.PositiveIntegerField()
    Flight_Num = models.CharField(max_length=80)
    Flight_Date = models.DateField()
    Oil_Quantity_Departure = models.DecimalField(max_digits=5, decimal_places=2)
    Oil_Quantity_Arrival = models.DecimalField(max_digits=5, decimal_places=2)
    Oil_Temperature_Departure = models.DecimalField(max_digits=5, decimal_places=2)
    Oil_Temperature_Arrival = models.DecimalField(max_digits=5, decimal_places=2)

class Aircraft_fleet(models.Model):
    Aircraft_type = models.CharField(max_length=16)
    Aircraft_Serial_Number = models.CharField(max_length=16)
    Engine_1_Ser_Num = models.ForeignKey('Engine', related_name='Engine_1', on_delete=models.PROTECT)
    Engine_2_Ser_Num = models.ForeignKey('Engine', related_name='Engine_2', on_delete=models.PROTECT)

Ошибка при типе связи "один к многим" (как сделано сейчас):
django.db.utils.IntegrityError: The row in table 'oilcons_aircraft_fleet' with primary key '1' has an invalid foreign key: oilcons_aircraft_fleet.Engine
_2_Ser_Num_id contains a value '193262' that does not have a corresponding value in oilcons_engine.id.
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Jack444
Для начала добавь первичный ключ
Ser_Num = models.PositiveIntegerField(primary_key=True)
Затем выполни миграции, если вылетит ошибка, удали всё что в __migrations__ и удали эти таблицы из БД, по новой всё мигрируй.
Сейчас у тебя неявно id как примари в Engine идёт, поэтому связывается ForeignKey по другому полю
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы