真的很困惑这里发生了什么。我有一个定义如下的类:class Profile(models.Model):
user = models.OneToOneField(User)
primary_phone = models.CharField(max_length=20)
address = models.ForeignKey(Address)
@property
def primary_email(self): return self.user.email
@primary_email.setter
def primary_email(self, val): self.user.email = val
注意:user有一个属性email。在
现在从命令行开始,我试着:
^{pr2}$
它显示出不同的值?具体来说,u.email的旧值。发生什么事?这怎么可能?我基本上只想为email创建一个别名。在
更多信息:>>> id(u) == id(u.profile.user)
False
>>> u
>>> u.profile.user
它们似乎是user的不同副本,但它们。。。什么?两个都以相同的值开始?在
这样做似乎会带来一些变化:>>> u.profile.primary_email = 'yyy'
>>> u.profile.user.save()
但是u.save()不会成功,因为无论出于什么原因{}。我想这回答了我的问题,但还是有点蹩脚。在
这两个对象在Python中引用同一个对象是可能的,对吧?只是Django的一个有趣的设计决定导致了这一切?在