【问题标题】:Changing ForeignKey doesn't affect parent in Django更改 ForeignKey 不会影响 Django 中的父级
【发布时间】:2017-01-05 11:32:23
【问题描述】:

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

【问题讨论】:

    标签: django-models foreign-keys


    【解决方案1】:

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

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

    【讨论】:

    • 这似乎是逻辑,我没有看到。谢谢!
    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多