Django模特:为什么名字冲突?

mpe*_*pen 7 django django-models

首先,我知道如何解决问题,我只是想了解它为什么会发生.错误消息:

users.profile:字段'address'的反向查询名称与相关字段'Address.profile'冲突.将related_name a rgument添加到'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)
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,这一行:

address = models.ForeignKey(Address, unique=True)
Run Code Online (Sandbox Code Playgroud)

将导致将属性添加到Address具有名称的类中profile.是什么创造了另一个 "个人资料"的名字?


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

有没有办法将地址字段复制到模型中,而不是为地址设置单独的表?没有Python继承(这没有意义,如果一个Model有2个地址,它就不起作用).

小智 24

django文档中它说:

如果你更喜欢Django没有创建向后关系,请将related_name设置为'+'.例如,这将确保User模型不会与此模型建立向后关系:

user = models.ForeignKey(User, related_name='+')
Run Code Online (Sandbox Code Playgroud)

但我自己从未尝试过....