2011-04-27 4 views
0

내보기를 통해 사용자의 "sendmail"부울 값을 변경할 수 있기를 원합니다. 하지만 True를 가진 사용자에 대해 개체를 한 번 추가 한 후에는 "IntegrityError at/accounts/send_me_email/column user_id가 고유하지 않기 때문에 더 이상 변경할 수 없습니다." 내가 도대체 ​​뭘 잘못하고있는 겁니까?사용자 개체의 부울 값 변경

 
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

당연히 변경 :

대신에, 당신이 의미! 거기에 도착하면 False에 달려 있기 때문에 여전히 내 코드에 몇 가지 문제가 있습니다. 나는 두 가지가 있기 때문에 그것이 의심 스럽습니다. 서로 뒤에 후자는 항상 False로 변경됩니다. – leffe

+0

예, 'elif'로 두 번째를 변경하십시오. –

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

이 짧다 내가 생각)