【发布时间】:2021-10-13 16:15:36
【问题描述】:
我遇到了与Django - reverse query name clash 中几乎相同的问题。
以下代码:
class Category(models.Model):
title = models.CharField(max_length=255)
featured_product = models.ForeignKey(
'Product', on_delete=models.SET_NULL, null=True)
class Product(models.Model):
title = models.CharField(max_length=255)
price = models.DecimalField(max_digits=6, decimal_places=2)
category = models.ForeignKey(Category, on_delete=models.PROTECT)
会有错误提示:
store.Category.featured_product: (fields.E303) Reverse query name for 'store.Category.featured_product' clashes with field name 'store.Product.category'.
我知道featured_productin Category 应该添加related_name="+" 以避免此错误。但由于这是一个多对一的情况,我认为store.Category.featured_productinProductclass 的反向查询名称应该是store.Product.category_set,所以它不应该与store.Product.category 发生冲突。
【问题讨论】:
-
请给出一个正确的例子来实际重现你的问题...首先这会出错,因为你没有为外键指定
on_delete(这是一个必需的 i> 论点)。接下来不是Supplier.default_tariff_set,而是Supplier.tariff_set,或者如果你设置了related_name或related_query_name,那么就是这样。 -
@AbdulAzizBarkat 我又编辑了一遍,请看一下。
标签: django