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