2011-04-27 109 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() 

它的短,我認爲)