Найти - Пользователи
Полная версия: Валидация полей формы в админке
Начало » Django » Валидация полей формы в админке
1
vaxXxa
Условие: Есть модель Promotion, которая имеет 2 поля:
models.py
starting_date = models.DateField(_('Дата начала'))
expiry_date = models.DateField(_('Дата окончания'))
Задача: Нужно, чтобы при сохранении информации в админке проверялось условие (“дата начала” меньше “даты конца”) и если ЛОЖЬ - то выдавалась ошибка.

Я вроде как сделал, но правильный ли подход? :

forms.py
from django import forms
from django.utils.translation import ugettext_lazy as _
from wonderay.main.models import Promotion

class PromotionAdminForm(forms.ModelForm):
class Meta:
model = Promotion

def clean(self):
self.cleaned_data = super(PromotionAdminForm, self).clean()
if self.instance.starting_date > self.instance.expiry_date:
raise forms.ValidationError(_('Дата начала акции должна быть меньше даты конца акции'))
return self.cleaned_data
admin.py
from django.contrib import admin
from wonderay.main import models, forms

class PromotionAdmin(admin.ModelAdmin):
form = forms.PromotionAdminForm

admin.site.register(models.Promotion, PromotionAdmin)
helm2004
А функцию save() в модели юзать не пробовал?
vaxXxa
helm2004, эм… вроде ошибку выдает не модель, а все же форма. Хотя я не пробовал) А надо бы?
vaxXxa
Пишу в этот топик, так как вопрос похожий и есть продолжением первого.
Есть в модели 2 поля - одно обязательно, второе - нет.
Как проверку, чтобы если в первом поле значение равно 1, то второе поля становилось обязательным???
Я опять таки переопределил форму, а в форме ModelForms не знаю как дальше.

Пробовал переопределить инит:
class PromotionAdminForm(forms.ModelForm):
class Meta:
model = Promotion

def __init__(self, *args, **kwargs):
super(PromotionAdminForm, self).__init__(*args, **kwargs)
if self.instance.discount == 1:
self.fields['comment'].required = True
Вроде бы идея правильная, но self.instance.discount - это то значение, которое уже в базе, а не которое только что введено в админке…

Дайте дельный совет. Спасибо!
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