#django #django-models #django-views
#django #django-модели #django-представления
Вопрос:
Я хочу иметь возможность изменять логическое значение «sendmail» для пользователя с помощью моего представления. Но после добавления объекта один раз для пользователя со значением True я больше не могу его изменить, потому что я получаю «Ошибка целостности в / accounts /send_me_email / столбец user_id не уникален». Что я делаю не так?
models.py класс SendMeMail (модели.Модель): пользователь = модели.ForeignKey (пользователь, уникальный = True) отправка почты = модели.BooleanField()
views.py из userprofile.models импортировать SendMeMail def send_me_email(запрос): """ Определите, нужны ли пользователю уведомления по электронной почте или нет """ # Проверьте текущее значение sendmail и действуйте соответствующим образом sendme = Отправить электронную почту (user=request.user) если sendme.sendmail == False: sendme.sendmail = True sendme.save() если sendme.sendmail == True: sendme.sendmail = False sendme.save() еще: sendme.sendmail = True sendme.save()
Ответ №1:
Эта строка:
sendme = SendMeMail(user=request.user)
не делает того, что, как вы утверждаете, он делает. Он не загружает объект SendMeMail с текущим пользователем из базы данных — он создает новый объект для этого пользователя. Поскольку вы (правильно) объявили пользовательское поле уникальным, при сохранении произойдет сбой.
Вместо этого вы имеете в виду это:
sendme = SendMeMail.objects.get(user=request.user)
Комментарии:
1. Конечно! В моем коде все еще есть некоторая проблема, поскольку он зависает на False, как только попадает туда, но я подозреваю, что это потому, что у меня есть два if: s друг за другом, и последний всегда меняет его на False then.
2. Да, просто измените второе 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()
я думаю, это короче)