更改外键不会影响 Django 中的父项



我正在使用带有PostgreSQL 9.3的DJANGO 1.5.1

我有一个这样的用户配置文件:

class UserProfile(models.Model):
GENDER_CHOICES = (('MALE', _('Male')), ('FEMALE', _('Female')),
USER_TYPE = (('USER', _('User')), ('SPECIAL', _('Special')))
user = models.OneToOneField(User, primary_key=True)
gender = models.CharField(max_length=13,
default='MALE',
choices=GENDER_CHOICES,
verbose_name=_('gender'))
type = models.CharField(max_length=20,
default='USER',
choices=USER_TYPE,
verbose_name=_('type'))

和一个房子模型:

class House(models.Model):
name = models.CharField(max_length=30, unique=True)
owner = models.ForeignKey(User,
null=True,
blank=True,
on_delete=models.SET_NULL)

当我试图修改房主时,我无法从房屋查询集获得信息:

我对我的所有者进行了一些修改:

user.get_profile().type = 'SPECIAL'
user.save()

然后我指定我的房子的主人:

house.owner = user
house.save()

当我试图取回信息时,"SPECIAL"没有显示,而是初始值:

house.objects.get(owner=user).owner.get_profile().type 
'USER'

如果我想使更改生效,我必须做:

house_profile = house.objects.get(owner=user).owner.get_profile()
house_profile.type = 'SPECIAL'
house_profile.save()

为什么当我更改业主档案时,它并没有反映出我的房屋模型?这是相同的用户id,如果我更改我的用户信息,它应该传播到所有相关的模型,对吧?

无论何时对相关模型进行更改,都必须保存该模型的对象,以便反映更改。

user_profile = user.get_profile()
user_profile.type = 'SPECIAL'
user_profile.save()

您尝试过:

house_profile = house.objects.get(owner=user).owner.get_profile()
house_profile.type = 'SPECIAL'
house_profile.save()

这是有效的,因为这里的house_profile实际上是user_profile的一个对象。

最新更新