Django中Flight与Passenger多对多中间表生成多余条目问题
问题成因
该问题由多对多字段错误配置symmetrical=True参数导致:
symmetrical是Django专为自引用多对多关联设计的参数,典型适用场景为用户模型的好友关系,作用是实现A关联B时自动创建B关联A的对称记录。- Flight与Passenger属于两个完全独立的非自引用模型,配置
symmetrical=True会导致Django关联逻辑异常,执行关联操作时生成不符合预期的无效条目。
解决方法
移除Flight模型中passengers字段的symmetrical=True配置即可,非自引用多对多关联无需设置该参数。修正后的模型定义如下:
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, related_name='flights', blank=True, )
配置修改完成后,依次执行python manage.py makemigrations和python manage.py migrate命令同步数据库结构,后续执行关联操作就只会生成符合预期的关联记录,不会再出现无效多余条目。
内容的提问来源于stack exchange,提问作者Binyamin
相关产品推荐
相关产品推荐

