我的模型中有以下内容。py
class items(models.Model):
name = models.CharField(max_length=255)
item_image = models.ImageField(upload_to='itemimage/', default=None, blank=True)
price = models.DecimalField(decimal_places=2, max_digits=100)
class comparelist(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
item1 = models.ForeignKey(items, on_delete=models.CASCADE, null=True, blank=True)
item2 = models.ForeignKey(items, on_delete=models.CASCADE, null=True, blank=True)
item3 = models.ForeignKey(items, on_delete=models.CASCADE, null=True, blank=True)
item4 = models.ForeignKey(items, on_delete=models.CASCADE, null=True, blank=True)
该想法是允许用户向其帐户添加4个不同的项目,以便他们进行比较。
但是当我进行迁移时,出现以下错误:
compareapp.comparelist.item1: (fields.E304) Reverse accessor for 'comparelist.item1' clashes with reverse accessor for 'comparelist.item2'.
HINT: Add or change a related_name argument to the definition for 'comparelist.item1' or 'comparelist.item2'.
我假设ForeignKey不是此处要使用的关系字段。 我试着阅读有关关系领域的django文档,但我对此一无所知。
有人可以给我关于3个不同关系字段的简单解释吗?在这种情况下应该使用哪一个?
答案 0 :(得分:2)
您应该使用Many-to-many关系,因为您希望比较列表中有多个项目,但是您可能还希望这些项目位于多个列表中。要限制列表具有的多对多关系,您可以编写一个自定义方法来添加新项目,例如:
class CompareList(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
items = models.ManyToManyField(items, related_name='compare_lists')
def add_item(self, item):
if self.items.count() < 4:
self.items.add(item)
else:
raise Exception('List limit reached')