2016-05-20 2 views
1

У меня есть следующие моделиНевозможно обновить Django 1.9 BooleanField

class UserProfile(models.Model): 

    user = models.OneToOneField(User, related_name='profile') 
    force_password_change = models.BooleanField(default=False) 

По некоторым причинам я не могу изменить BooleanField на всех. Я хотел бы сделать это в представлении без модельной формы. Вот результат, который я получаю из командной строки Django.

>>> new_user = User.objects.get(username="bob") 
>>> new_user 
<User: bob> 
>>> type(new_user) 
<class 'django.contrib.auth.models.User'> 
>>> new_user.profile 
<UserProfile: bob> 
>>> type(new_user.profile) 
<class 'accounts.models.UserProfile'> 
>>> new_user.profile.force_password_change 
False 
>>> new_user.profile.force_password_change = True 
>>> new_user.save() 
>>> new_user.profile.force_password_change 
False 
>>> 

Итак, что мне здесь не хватает? Я уверен, что это что-то глупое, но любая помощь будет отличной.

UPDATE:

Тот же вопрос, если обновить поле профиля.

>>> new_user.profile.force_password_change 
False 
>>> new_user.profile.force_password_change = True 
>>> new_user.profile.save() 
>>> new_user.profile.force_password_change 
False 
>>> 

UPDATE 2:

Пробовал это также:

>>> 
>>> new_user.profile.force_password_change = True 
>>> new_user.profile.save() 
>>> new_user = User.objects.get(pk=new_user.pk) 
>>> new_user.profile.force_password_change 
False 
>>> 

Я предполагаю, что последний бит полезной информации, которую я могу предоставить то, что я могу полностью изменить поле force_password_change через панель администратора. Это похоже на то, что действие save не происходит, когда я пытаюсь user.profile.save()? Но я не получаю никаких ошибок, которые я замечаю.

+0

Вы должны сохранить 'new_user.profile' ... – thebjorn

+0

Nope. Не работает. >>> new_user.profile.force_password_change Ложные >>> new_user.profile.force_password_change = True >>> new_user.profile.save() >>> new_user.profile.force_password_change Ложные >>> – RG5

+0

обновление вашего вопрос, не помещайте код в комментарии. – thebjorn

ответ

1

Вы пытались сохранить объект UserProfile напрямую?

p = UserProfile.objects.get(user=new_user) 
p.force_change_password = True 
p.save() 

print new_user.profile.force_change_password 

Пожалуйста, извините мою краткость здесь ... Я набираю это по телефону.

+0

Спасибо! Это работает. Любая идея, почему это не сработало по-другому? – RG5

+0

Я думаю, что замена моей первой строки 'p = new_user.profile' тоже должна работать (однако я не могу дважды проверить это на мобильном устройстве). –

+0

Я думаю, что этот раздел документов, особенно последние 2 абзаца, может быть полезен - * Расширение существующей модели пользователя * -https: //docs.djangoproject.com/en/1.8/topics/auth/customizing/#extending- существующий пользователь-модель. –

Смежные вопросы