Форум сайта python.su
0
Вот функция:
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
Офлайн
0
можно смотреть url. Насколько я помню в django в админке он заканчивается на /add. Костыльный метод.
можно брать объект из базы если его нет - то добавление. Хотя здесь есть загвоздка, если его нет - его могли удалить …
а вообще странный какой-то вопрос. Зачем проверять форму только при добавлении? Что мешает тогда добавить правильные данные и потом отредактировать на невалидные? Может если не дает сохранить - проблема в другом?
Офлайн
0
Данные правильные, просто например нужно подправить description, изменяю, поле cidr остается прежним и функция ругается на дубликат.
Офлайн
0
Подсказали что нужно использовать сигналы. Как их использовать, т.е. я имею ввиду как определить редактируется ли запись или добавляется новая?
Офлайн
0
Как же быть то, как сделать чтобы при добавлении записи в базу проверялось одно поле на наличие дублирования, но при редактировании это же записи она дала его сохранить. Что-то я не уловлю логику.
Офлайн
0
Т. е. при редактировании записи валидация уникальности валится на этой же записи? Исключи эту запись при выборке по pk или какому-то еще уникальному параметру (по приведенному коду не ясно).
Отредактировано (Авг. 11, 2011 15:44:02)
Офлайн
0
а как исключить её?
Офлайн
0
exclude, а дальше уже ты лучше знаешь, как у тебя все устроено.
Офлайн
0
Все таки я не понимаю как сделать. Как исключить из проверки саму себя? Про exclude думал, но ведь я заранее не знаю какую именно запись по pk исключать из проверки. Неужели только я с такой проблемой столкнулся…
Офлайн
0
вот решение, спасибо знатокам с конфы
for one_sub in IpTable.objects.exclude(id=self.instance.id):
Офлайн