Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2011 09:57:29

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

Вот функция:

    def clean_cidr(self):
cidr = self.cleaned_data['cidr']

for one_sub in IpTable.objects.all():
compare = IPv4Network(one_sub.cidr)
result = compare.overlaps(IPv4Network(cidr))

if result == True:
raise forms.ValidationError(u"Пересечение сети с %s" % one_sub.description)

return self.cleaned_data
Как сделать чтобы проверка поля была только в момент добавления новой записи? При редактировании уже существующей она не дает сохранить.



Офлайн

#2 Авг. 11, 2011 10:37:47

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

можно смотреть url. Насколько я помню в django в админке он заканчивается на /add. Костыльный метод.
можно брать объект из базы если его нет - то добавление. Хотя здесь есть загвоздка, если его нет - его могли удалить …

а вообще странный какой-то вопрос. Зачем проверять форму только при добавлении? Что мешает тогда добавить правильные данные и потом отредактировать на невалидные? Может если не дает сохранить - проблема в другом?



Офлайн

#3 Авг. 11, 2011 10:46:29

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

Данные правильные, просто например нужно подправить description, изменяю, поле cidr остается прежним и функция ругается на дубликат.



Офлайн

#4 Авг. 11, 2011 13:09:16

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

Подсказали что нужно использовать сигналы. Как их использовать, т.е. я имею ввиду как определить редактируется ли запись или добавляется новая?



Офлайн

#5 Авг. 11, 2011 15:31:40

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

Как же быть то, как сделать чтобы при добавлении записи в базу проверялось одно поле на наличие дублирования, но при редактировании это же записи она дала его сохранить. Что-то я не уловлю логику.



Офлайн

#6 Авг. 11, 2011 15:42:02

gruy
От:
Зарегистрирован: 2010-02-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

Т. е. при редактировании записи валидация уникальности валится на этой же записи? Исключи эту запись при выборке по pk или какому-то еще уникальному параметру (по приведенному коду не ясно).



Отредактировано (Авг. 11, 2011 15:44:02)

Офлайн

#7 Авг. 11, 2011 15:46:47

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

а как исключить её?



Офлайн

#8 Авг. 11, 2011 15:52:18

gruy
От:
Зарегистрирован: 2010-02-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

exclude, а дальше уже ты лучше знаешь, как у тебя все устроено.



Офлайн

#9 Авг. 12, 2011 11:46:03

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

Все таки я не понимаю как сделать. Как исключить из проверки саму себя? Про exclude думал, но ведь я заранее не знаю какую именно запись по pk исключать из проверки. Неужели только я с такой проблемой столкнулся…



Офлайн

#10 Авг. 12, 2011 12:47:24

LinuxBoy
От:
Зарегистрирован: 2009-12-23
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Валидация формы в админке

вот решение, спасибо знатокам с конфы
for one_sub in IpTable.objects.exclude(id=self.instance.id):



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version