Size: a a a

Django [ru] #STAY HOME

2020 January 19

tn

tot samiy neizvestniy in Django [ru] #STAY HOME
Какой триггер
источник

A

Andrey in Django [ru] #STAY HOME
linuxoid
я рот того там там у джанги
У меня ормка дефолт нулом перетирала и мне пришлось автоинкремент в save реализовать
источник

М

Михаил in Django [ru] #STAY HOME
Подскажите, есть модель с полем name = models.CharField(max_length=10). Если я программно создам объект с полем name длиной больше десяти символом, то потом без проблем смогу его сохранить с помощью obj.save(). Что нужно предпринять чтобы получить исключение?
Я понимаю что можно переопределить save(), но может быть есть какие-то встроенные валидаторы или методы?
источник

A

Andrey in Django [ru] #STAY HOME
Точно сохранишь?
источник

М

Михаил in Django [ru] #STAY HOME
Andrey
Точно сохранишь?
В том-то и беда, что да. Через админку не дает сохранять, а програмно - дает. django3
источник

М

Михаил in Django [ru] #STAY HOME
Это ошибка из админки при попытке сохранить ручками, при том что эти данные там уже есть (сохранены програмно)
источник

GS

Grigory Surkov in Django [ru] #STAY HOME
Привет, можете посоветовать нормальное api, которое предоставляет лист  стран (только названий)
источник

EJ

Emir Jumaliev in Django [ru] #STAY HOME
Михаил
Это ошибка из админки при попытке сохранить ручками, при том что эти данные там уже есть (сохранены програмно)
Мб надо в самой бд,порыться?
источник

ОК

Омурбек уулу Кайрат in Django [ru] #STAY HOME
Grigory Surkov
Привет, можете посоветовать нормальное api, которое предоставляет лист  стран (только названий)
источник

М

Михаил in Django [ru] #STAY HOME
Emir Jumaliev
Мб надо в самой бд,порыться?
Блин, наверное ты прав. Я для тестов использую sqllite и, скорее всего, django  огранечения обрабатывает на половину, а sqlite - вообще не умеет.
источник

MB

Muslim Beibytuly in Django [ru] #STAY HOME
Михаил
Это ошибка из админки при попытке сохранить ручками, при том что эти данные там уже есть (сохранены програмно)
Программно - raw sql?
источник

М

Михаил in Django [ru] #STAY HOME
Muslim Beibytuly
Программно - raw sql?
нет конечно.
obj, created = User.objects.get_or_create(name=...)
obj.name = ...# больше допустимой длины
obj.save()
источник

М

Михаил in Django [ru] #STAY HOME
Кажется решено. Перед вызовом obj.save() нужно вызвать        obj.full_clean().
https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean
источник

MB

Muslim Beibytuly in Django [ru] #STAY HOME
Михаил
Кажется решено. Перед вызовом obj.save() нужно вызвать        obj.full_clean().
https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean
В любом случае ошибка должна вылететь, это не зависит от full_clean
источник

MB

Muslim Beibytuly in Django [ru] #STAY HOME
Михаил
Кажется решено. Перед вызовом obj.save() нужно вызвать        obj.full_clean().
https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean
Мб это?
https://chrisbartos.com/articles/sqlite-doesnt-care-about-your-max_length/
Но это все же баг, неверное поведение
источник

М

Михаил in Django [ru] #STAY HOME
Muslim Beibytuly
В любом случае ошибка должна вылететь, это не зависит от full_clean
Я согласен, она должна, но не вылетает. Валидация для save() производится автоматически:
Note that full_clean() will not be called automatically when you call your model’s save() method. You’ll need to call it manually when you want to run one-step model validation for your own manually created models.

Добавил этот метод и все упало, как и нужно.
источник

MB

Muslim Beibytuly in Django [ru] #STAY HOME
Михаил
Я согласен, она должна, но не вылетает. Валидация для save() производится автоматически:
Note that full_clean() will not be called automatically when you call your model’s save() method. You’ll need to call it manually when you want to run one-step model validation for your own manually created models.

Добавил этот метод и все упало, как и нужно.
Она не проводится только для SQLite, в любой другой rdbms получите в лицо IntegrityError
источник

М

Михаил in Django [ru] #STAY HOME
Михаил
Я согласен, она должна, но не вылетает. Валидация для save() производится автоматически:
Note that full_clean() will not be called automatically when you call your model’s save() method. You’ll need to call it manually when you want to run one-step model validation for your own manually created models.

Добавил этот метод и все упало, как и нужно.
Сегодня мы многое узнали:
1. SQLite забило на это болт
2. Для Джанги нужно вызывать валидацию ручками.
источник

MB

Muslim Beibytuly in Django [ru] #STAY HOME
Михаил
Сегодня мы многое узнали:
1. SQLite забило на это болт
2. Для Джанги нужно вызывать валидацию ручками.
Пользуйтесь postgres/mysql в контейнере для локальной разработки, не создавая костылей с ручным вызовом full_clean:D
источник

М

Михаил in Django [ru] #STAY HOME
Muslim Beibytuly
Она не проводится только для SQLite, в любой другой rdbms получите в лицо IntegrityError
Абсолютно точно!
источник