【问题标题】: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()

【问题讨论】:

    标签: django django-models django-views


    【解决方案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()
    

    我认为它更短)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2014-01-06
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      相关资源
      最近更新 更多