更改ForeignKey不会影响Django中的父级

时间:2017-01-05 11:32:24

标签: django-models foreign-keys

我在DJANGO 1.5.1上使用PostgreSQL 9.3

我有这样的UserProfile:

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,如果我更改了我的用户信息,它应该传播到所有相关模型,对吗?

1 个答案:

答案 0 :(得分:0)

每当您在相关模型中进行更改时,都必须保存该模型的对象,以便能够反映更改。

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的对象。