更改用户对象的布尔值
问题描述:
我希望能够通过我的视图为用户更改我的“sendmail”布尔值。但是,在为值为True的用户添加一次对象之后,我无法再更改它,因为我收到“/ accounts/send_me_email /列user_id上的IntegrityError不唯一”。我究竟做错了什么?更改用户对象的布尔值
models.py class SendMeMail(models.Model): user = models.ForeignKey(User, unique=True) sendmail = models.BooleanField()
views.py from userprofile.models import SendMeMail def send_me_email(request): """ Define if a user want email notifications or not """ # Check for current sendmail value and act accordingly sendme = SendMeMail(user=request.user) if sendme.sendmail == False: sendme.sendmail = True sendme.save() if sendme.sendmail == True: sendme.sendmail = False sendme.save() else: sendme.sendmail = True sendme.save()
答
这条线:
sendme = SendMeMail(user=request.user)
不会做你要求它做什么。它不会从数据库加载当前用户的SendMeMail对象 - 它为该用户创建一个新的对象。由于您(正确)将用户字段声明为唯一,因此保存时会失败。
相反,你的意思是这样的:
sendme = SendMeMail.objects.get(user=request.user)
答
,也许改变
if sendme.sendmail == False:
sendme.sendmail = True
sendme.save()
if sendme.sendmail == True:
sendme.sendmail = False
sendme.save()
else:
sendme.sendmail = True
sendme.save()
到
sendme.sendmail = !sendme.sendmail
sendme.save()
它的短,我认为)
Ofcourse!我的代码中仍然存在一些问题,因为它一旦到达那里就挂在False上,但是我怀疑这是因为我有两个if:s之后,而后者总是将它更改为False。 – leffe 2011-04-27 12:36:19
是的,只要更改第二个参数即可。 – 2011-04-27 12:49:13