gpt4 book ai didi

Django模型: Why the name clash?

转载 作者:行者123 更新时间:2023-12-04 05:38:26 25 4
gpt4 key购买 nike

首先,我知道如何解决该问题,我只是想了解为什么会发生此问题。错误信息:

users.profile: Reverse query name for field 'address' clashes with related field 'Address.profile'. Add a related_name a rgument to the definition for 'address'.



和代码:
class Address(models.Model):
country = fields.CountryField(default='CA')
province = fields.CAProvinceField()
city = models.CharField(max_length=80)
postal_code = models.CharField(max_length=6)
street1 = models.CharField(max_length=80)
street2 = models.CharField(max_length=80, blank=True, null=True)
street3 = models.CharField(max_length=80, blank=True, null=True)

class Profile(Address):
user = models.ForeignKey(User, unique=True, related_name='profile')
primary_phone = models.CharField(max_length=20)
address = models.ForeignKey(Address, unique=True)

如果我理解正确,则此行:
address = models.ForeignKey(Address, unique=True)

将导致一个名为 Address的属性添加到 profile类。是什么在创造另一个“个人资料”名称?

如果我不需要反向名称怎么办?有没有办法禁用它?地址用于许多事情,因此大多数反向关系无论如何都是空白的。

有没有一种方法可以将地址字段复制到模型中,而不是使用单独的地址表?没有Python继承(这是没有意义的,并且如果一个Model有2个地址,那么它将不起作用)。

最佳答案

django docs中说:

如果您希望Django不创建向后关系,则将related_name设置为'+'。例如,这将确保User模型不会与此模型保持向后关系:

user = models.ForeignKey(User, related_name='+')

但是我从来没有亲自尝试过...

关于Django模型: Why the name clash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com