迁移mysql数据库到django,唯一的约束?



目前我有一个模型的一部分:

class Flight(models.Model):
flight_number = models.PositiveIntegerField(primary_key=True)
airline_name = models.ForeignKey(Airline, models.DO_NOTHING, db_column='airline_name')
departure_datetime = models.DateTimeField()
departure_airport = models.ForeignKey(Airport, models.DO_NOTHING, db_column='departure_airport', blank=True, null=True, related_name='departure_airport')
arrival_airport = models.ForeignKey(Airport, models.DO_NOTHING, db_column='arrival_airport', blank=True, null=True, related_name='arrival_airport')
arrival_datetime = models.DateTimeField(blank=True, null=True)
airplane = models.ForeignKey(Airplane, models.DO_NOTHING, blank=True, null=True)
base_price = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
flight_status = models.CharField(max_length=9)
class Meta:
managed = False
db_table = 'flight'
constraints = [
models.UniqueConstraint(fields=['flight_number', 'airline_name', 'departure_datetime'], name='unique_flight')
]
class Ticket(models.Model):
ticket_id = models.AutoField(primary_key=True)
customer = models.ForeignKey(Customer, models.DO_NOTHING)
flight_number = models.ForeignKey(Flight, models.DO_NOTHING, db_column='flight_number', to_field='flight_number', related_name='ticket_flight_number')
airline_name = models.ForeignKey(Flight, models.DO_NOTHING, db_column='airline_name', to_field='airline_name', related_name='ticket_airline_name')
departure_datetime = models.ForeignKey(Flight, models.DO_NOTHING, db_column='departure_datetime', to_field='departure_datetime', related_name='ticket_departure_datetime')
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
email = models.CharField(max_length=100)
date_of_birth = models.DateField()
class Meta:
managed = False
db_table = 'ticket'
constraints = [
models.UniqueConstraint(fields=['flight_number', 'airline_name', 'departure_datetime', 'first_name', 'last_name', 'email', 'date_of_birth'], name='unique_ticket')
]

但我一直得到错误日志,而试图运行迁移:

ERRORS:
atrsapp.Ticket.airline_name: (fields.E311) 'Flight.airline_name' must be unique because it is referenced by a foreign key.
HINT: Add unique=True to this field or add a UniqueConstraint (without condition) in the model Meta.constraints.
atrsapp.Ticket.departure_datetime: (fields.E311) 'Flight.departure_datetime' must be unique because it is referenced by a foreign key.
HINT: Add unique=True to this field or add a UniqueConstraint (without condition) in the model Meta.constraints.

在运行inspectdb后尝试迁移时,我已经不得不更改一些东西(添加相关名称),但这两个错误不会消失。我试着做内联唯一=真的无济于事。任何建议吗?

首先,您知道我们可以有多个Flight与相同的外键到Airline和Airport,所以当您在Ticket to Flight上创建外键并将其引用到Flight的外键时,这就变成了一个问题,因为我们可以在Flight上使用相同的外键来处理Flight并且它就像我们有多对多关系,对于这个建议,您可以在Flight字段上设置唯一的这些字段,或者简单地仅为Flight id设置一个外键,并在需要该数据时为它们创建一个新的查询