2011-04-27 75 views
0

我希望能够通过我的视图为用户更改我的“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() 

回答

0

这条线:

sendme = SendMeMail(user=request.user) 

不会做你要求它做什么。它不会从数据库加载当前用户的SendMeMail对象 - 它为该用户创建一个新的对象。由于您(正确)将用户字段声明为唯一,因此保存时会失败。

相反,你的意思是这样的:

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

Ofcourse!我的代码中仍然存在一些问题,因为它一旦到达那里就挂在False上,但是我怀疑这是因为我有两个if:s之后,而后者总是将它更改为False。 – leffe 2011-04-27 12:36:19

+0

是的,只要更改第二个参数即可。 – 2011-04-27 12:49:13

0

,也许改变

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

它的短,我认为)