我在 Django 中放置了一个循环外键,这导致了名称冲突。我不明白为什么会发生冲突或如何最好地补救。 (这是我第一次在模型中进行循环引用 - 所以我不确定这是否是问题的根本原因?)
对于以下情况:
class Supplier(models.Model):
unique_id = models.IntegerField(unique=True)
name = models.CharField(max_length=255, unique=True)
rating = models.FloatField(null=True)
last_updated = models.DateTimeField(auto_now=True)
default_tariff = models.ForeignKey('Tariff')
class Tariff(models.Model):
name = models.CharField(max_length=255)
supplier = models.ForeignKey(Supplier)
end_date = models.DateField(null=True, blank=True)
payment_method = models.ManyToManyField(PaymentMethod)
region = models.ManyToManyField(Region)
错误是:
“Supplier.default_tariff”的反向查询名称与字段冲突
命名为“Tariff.supplier”。
提示:重命名字段“Tariff.supplier”,或添加/更改字段定义的 related_name 参数
'供应商.default_tariff'。
为了避免这种情况,您可以使用related_name https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.ForeignKey.related_name:
class Supplier(models.Model):
unique_id = models.IntegerField(unique=True)
name = models.CharField(max_length=255, unique=True)
rating = models.FloatField(null=True)
last_updated = models.DateTimeField(auto_now=True)
default_tariff = models.ForeignKey('Tariff', related_name='+')
class Tariff(models.Model):
name = models.CharField(max_length=255)
supplier = models.ForeignKey(Supplier)
end_date = models.DateField(null=True, blank=True)
payment_method = models.ManyToManyField(PaymentMethod)
region = models.ManyToManyField(Region)
从评论中编辑:
当您设置 related_name="+" Django 不会创建向后关系。在这种情况下,关税与供应商模型不会有向后关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)