Уведомления

Группа в Telegram: @pythonsu

#1 Март 7, 2010 20:09:58

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Условие: Есть модель 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)



Офлайн

#2 Март 9, 2010 16:01:25

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

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

А функцию save() в модели юзать не пробовал?

Офлайн

#3 Март 9, 2010 16:17:35

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

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

helm2004, эм… вроде ошибку выдает не модель, а все же форма. Хотя я не пробовал) А надо бы?



Офлайн

#4 Март 10, 2010 20:01:41

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Пишу в этот топик, так как вопрос похожий и есть продолжением первого.
Есть в модели 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 - это то значение, которое уже в базе, а не которое только что введено в админке…

Дайте дельный совет. Спасибо!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version