Django - 反向查询名称冲突

时间:2015-11-30 16:57:28

标签: django django-models

我在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参数添加/更改为字段定义   ' Supplier.default_tariff'

2 个答案:

答案 0 :(得分:4)

为避免这种情况,您可以使用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)

答案 1 :(得分:1)

尝试使用以下解决方案。它适用于django == 3。

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)s_tarriff")