更改用户对象的布尔值

Posted

技术标签:

【中文标题】更改用户对象的布尔值【英文标题】:Change boolean value for user object 【发布时间】:2011-08-13 19:49:00 【问题描述】:

我希望能够通过我的视图为用户更改我的“sendmail”布尔值。但是在为值为 True 的用户添加一次对象后,我无法再更改它,因为我收到“IntegrityError at /accounts/send_me_email/ column user_id is not unique”。我做错了什么?

模型.py 类 SendMeMail(models.Model): user = models.ForeignKey(User, unique=True) sendmail = models.BooleanField() 视图.py 从 userprofile.models 导入 SendMeMail def send_me_email(请求): """ 定义用户是否需要电子邮件通知 """ # 检查当前 sendmail 值并采取相应措施 sendme = SendMeMail(user=request.user) 如果 sendme.sendmail == 假: sendme.sendmail = 真 sendme.save() 如果 sendme.sendmail == 真: sendme.sendmail = 假 sendme.save() 别的: sendme.sendmail = 真 sendme.save()

【问题讨论】:

【参考方案1】:

这一行:

sendme = SendMeMail(user=request.user)

没有做你声称的事情。它不会使用数据库中的当前用户加载 SendMeMail 对象 - 它会为该用户创建一个 new 对象。由于您(正确地)将用户字段声明为唯一,因此保存时失败。

相反,你的意思是:

sendme = SendMeMail.objects.get(user=request.user)

【讨论】:

当然!我的代码中仍然存在一些问题,因为它一旦到达那里就会挂在 False 上,但我怀疑这是因为我有两个 if:s 一个接一个,而后者总是将其更改为 False。 是的,只需将第二个 if 更改为 elif【参考方案2】:

也许会改变

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()

我认为它更短)

【讨论】:

以上是关于更改用户对象的布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据布尔值 (SwiftUI) 更改对象的绑定源?

布尔值不能更改

如果在百里香中选中复选框,如何更改布尔值?

如何更改数据库中的布尔值调用href中的函数?

更改 nsdictionary 中的布尔值时的 EXC_BAD_ACCESS

在 React.js 中使用 handleClick 更改布尔值 [重复]