2011-04-27 3 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

Ofcourse! В моем коде все еще есть проблема, так как он зависает на False, когда он туда попадает, но я подозреваю, что это потому, что у меня есть два, если: s друг за другом, а последний всегда меняет его на 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() 

это короче я думаю)

Смежные вопросы