Django - 反向查询名称冲突

标签 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)

错误是:

Reverse query name for 'Supplier.default_tariff' clashes with field name 'Tariff.supplier'. HINT: Rename field 'Tariff.supplier', or add/change a related_name argument to the definition for field 'Supplier.default_tariff'.

最佳答案

为避免这种情况,您可以使用 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 不会创建向后关系。在这种情况下,关税将与供应商模型没有反向关系。

关于Django - 反向查询名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34003865/

相关文章:

javascript - 如何在编辑内容并将javascript变量传递给新输入的字段后将Django "forms.ModelForm"保存在数据库中

python - HttpResponseRedirect 反向不起作用 Django

python - 如何获取ID最小的模型对象?

python - 如何从 django 的 db 模型中获取字段类型字符串

python - Django 中的模型未定义

python - Django - 为开发 Web 服务器显示 404 页面 (http ://127. 0.0.1:8000/)

python - 如何使用唯一约束更新 Django 中的对象列表?

django - 主管 Django Gunicorn Gevent 内存使用

python - 如何查询给定条件的先前项目

Django 的 self.client.login(...) 在单元测试中不起作用