LinuxBoy
Авг. 11, 2011 09:57:29
Вот функция:
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
Авг. 11, 2011 10:37:47
можно смотреть url. Насколько я помню в django в админке он заканчивается на /add. Костыльный метод.
можно брать объект из базы если его нет - то добавление. Хотя здесь есть загвоздка, если его нет - его могли удалить …
а вообще странный какой-то вопрос. Зачем проверять форму только при добавлении? Что мешает тогда добавить правильные данные и потом отредактировать на невалидные? Может если не дает сохранить - проблема в другом?
LinuxBoy
Авг. 11, 2011 10:46:29
Данные правильные, просто например нужно подправить description, изменяю, поле cidr остается прежним и функция ругается на дубликат.
LinuxBoy
Авг. 11, 2011 13:09:16
Подсказали что нужно использовать сигналы. Как их использовать, т.е. я имею ввиду как определить редактируется ли запись или добавляется новая?
LinuxBoy
Авг. 11, 2011 15:31:40
Как же быть то, как сделать чтобы при добавлении записи в базу проверялось одно поле на наличие дублирования, но при редактировании это же записи она дала его сохранить. Что-то я не уловлю логику.
gruy
Авг. 11, 2011 15:42:02
Т. е. при редактировании записи валидация уникальности валится на этой же записи? Исключи эту запись при выборке по pk или какому-то еще уникальному параметру (по приведенному коду не ясно).
LinuxBoy
Авг. 11, 2011 15:46:47
а как исключить её?
gruy
Авг. 11, 2011 15:52:18
exclude, а дальше уже ты лучше знаешь, как у тебя все устроено.
LinuxBoy
Авг. 12, 2011 11:46:03
Все таки я не понимаю как сделать. Как исключить из проверки саму себя? Про exclude думал, но ведь я заранее не знаю какую именно запись по pk исключать из проверки. Неужели только я с такой проблемой столкнулся…
LinuxBoy
Авг. 12, 2011 12:47:24
вот решение, спасибо знатокам с конфы
for one_sub in IpTable.objects.exclude(id=self.instance.id):