Найти - Пользователи
Полная версия: Валидация формы в админке
Начало » Django » Валидация формы в админке
1
LinuxBoy
Вот функция:
    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
Как сделать чтобы проверка поля была только в момент добавления новой записи? При редактировании уже существующей она не дает сохранить.
Ziberbulger
можно смотреть url. Насколько я помню в django в админке он заканчивается на /add. Костыльный метод.
можно брать объект из базы если его нет - то добавление. Хотя здесь есть загвоздка, если его нет - его могли удалить …

а вообще странный какой-то вопрос. Зачем проверять форму только при добавлении? Что мешает тогда добавить правильные данные и потом отредактировать на невалидные? Может если не дает сохранить - проблема в другом?
LinuxBoy
Данные правильные, просто например нужно подправить description, изменяю, поле cidr остается прежним и функция ругается на дубликат.
LinuxBoy
Подсказали что нужно использовать сигналы. Как их использовать, т.е. я имею ввиду как определить редактируется ли запись или добавляется новая?
LinuxBoy
Как же быть то, как сделать чтобы при добавлении записи в базу проверялось одно поле на наличие дублирования, но при редактировании это же записи она дала его сохранить. Что-то я не уловлю логику.
gruy
Т. е. при редактировании записи валидация уникальности валится на этой же записи? Исключи эту запись при выборке по pk или какому-то еще уникальному параметру (по приведенному коду не ясно).
LinuxBoy
а как исключить её?
gruy
exclude, а дальше уже ты лучше знаешь, как у тебя все устроено.
LinuxBoy
Все таки я не понимаю как сделать. Как исключить из проверки саму себя? Про exclude думал, но ведь я заранее не знаю какую именно запись по pk исключать из проверки. Неужели только я с такой проблемой столкнулся…
LinuxBoy
вот решение, спасибо знатокам с конфы
for one_sub in IpTable.objects.exclude(id=self.instance.id):
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB