LINUX.ORG.RU

Валидация информации перед записью в бд

 ,


0

2

Есть модель. В модели есть типа такого

 
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="invalid blablabla")
phone = models.CharField(validators=[phone_regex], max_length=17, blank=True)

Когда я из админки пытаюсь добавить в это поле информацию в неверном формате - админка сообщает, что invalid blablabla, но когда я в коде добавляю информацию, то ничего не валидируется. Как правильно из кода валидировать?



Последнее исправление: Xwo (всего исправлений: 2)

Смотри в сторону full_clean()/clean(), либо используй формы. Только не делай валидацию в save().

oldstable
()

Есть модель

Какая модель? Что вы под этим понимаете? Что за СУБД?

но когда я в коде добавляю информацию

Как именно вы это делаете?

Как правильно из кода валидировать?

В общем случае сначала регуляркой или другим методом в коде, чтобы не нагружать лишний раз СУБД, которая в принципе может быть на сервере и обслуживать тысячи клиентов. Но проверять данные от пользователей всё равно придется на серверной части, т.к. они могут модифицировать ответ от клиента или переписать клиент.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

Валидировать надо только через формы, модели не предназначены для валидации. Формы не обязательно должны принимать данные post, это может быть любой dict

Берете форму, скармливаете ей dict с данными, а дальше is_valid

На худой конец можно попробовать сигнал pre save, и кидать exception, но это когда другое не подходит

ism ★★★
()
Последнее исправление: ism (всего исправлений: 3)
Ответ на: комментарий от paganmind

Цитата из хорошей книги по Django:

100% of Django projects should use Forms.
95% of Django projects should use ModelForms.
91% of all Django projects use ModelForms.
80% of ModelForms require trivial logic.
20% of ModelForms require complicated logic.

paganmind
()

21 век а они телефоны регекспом валидируют. Возьми phonenumbers. Очень удобно.

ggrn ★★★★★
()
Ответ на: комментарий от eternal_sorrow

О, посмотрел на данную технологию. Её похоже укурки делали, добавлю пожалуй тег в игнорируемые. Спасибо за напоминание.

peregrine ★★★★★
()

Не нужно ничего валидировать в коде. Нужно добавить валидацию в описание твоей модели в базе данных. PostgreSQL такое позволяет сделать. А ошибку клиенту можешь общую кидать, навроде «все пропало, попробуй еще раз, лолыч».

anonymous
()
Ответ на: комментарий от anonymous

а если клиент в одном месте ошибся? он что по всей форме должен искать очепятку? что дальше, данные не хранить - заново вбивать?

Frost ★★★
()
Ответ на: комментарий от Frost

Клиент пусть и запоминает и валидирует, в бэкенде то зачем говнокодить? То, что бд валидирует, это вполне логично. А то на клиенте отвалидируй, в коде отвалидируй, а бд твоей плевать что в неё пихают? Видимо можно избавиться от части неэффективных проверок.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.