Size: a a a

2021 June 22

A

Alex in Moscow Python
Проверка уникальности емейла идет за счет указания в модели
email = models.EmailField(_('email address'), unique=True)

В сериалайзере же поле емейла выглядит так:

email = serializers.EmailField()

Изначально я использовал ModelSerializer и валидировал почту на уникальность в нем и все работало ОК, но пытаюсь сделать без двойной валидации почты на уникальность, чтобы она проходила только через поле в модели
источник

A

Alex in Moscow Python
источник

ПМ

Павел Мальцев... in Moscow Python
то есть сам себе в ногу стреляешь
источник

DB

Dmitry Bibik in Moscow Python
юзай просто ModelSerializer
все будет ок
источник

ПМ

Павел Мальцев... in Moscow Python
а миграция в базу сделана с unique=True?
источник

A

Alex in Moscow Python
да
источник

ПМ

Павел Мальцев... in Moscow Python
и если залезть в базу там есть констраинт на уникальность поля email?
источник

ПМ

Павел Мальцев... in Moscow Python
потому что документация прямо говорит, что ты должен падать с ошибкой
источник

A

Alex in Moscow Python
в базу не залезал, но в файле миграции строка с мылом выглядит так

('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
источник

ПМ

Павел Мальцев... in Moscow Python
и делал команду migrate?
источник

A

Alex in Moscow Python
Так он и падает с ошибкой, только предварительно проводит сохранение которое по идее делать не должен)
источник

A

Alex in Moscow Python
да
источник

ПМ

Павел Мальцев... in Moscow Python
то есть дубля в базе нет?
источник

A

Alex in Moscow Python
только что снес все файлы миграции и файл базы данных, сделал
makemigrations и migrate
ничего не поменялось
источник

ПМ

Павел Мальцев... in Moscow Python
дубль почты в базе создаётся?
источник

A

Alex in Moscow Python
Блин, тут я не в состоянии проверить на данный момент, т.к. тесты вроде как не сохраняются в бд, а я только ими проверку провожу, а фронта под эту задачу еще нет чтобы ручками покликать

В базе посмотрел, поле с мылом обозначено как уникальное, регистрация на одно и то же мыло само собой не проходит
источник

ПМ

Павел Мальцев... in Moscow Python
а теперь чисто предположение, ты думаешь, что save модели ещё раз проверяет данные перед сохранением?
источник

A

Alex in Moscow Python
я думал что он доходит до момента записи данных в бд, там натыкается на необходимость уникальности поля, чекает уникальное ли оно и выходит по ошибике, но как я понимаю я глубоко заблуждался)
источник

ПМ

Павел Мальцев... in Moscow Python
save делает ровно то как он называется, то есть сохраняет, база говорит, что ты не прав и кидает ошибку. Хочешь сделать хорошо, не придумывай велосипед, ModelSerializer прекрасно подходит. Следующий вопрос зачем ты у пользователя пароль спрашиваешь, ты и так знаешь, что это за пользователь
источник

ПМ

Павел Мальцев... in Moscow Python
если уж взялся за обновление записи, то методы PUT и PATCH в помощь
источник