2012-05-17 2 views
5

Я хочу заполнить поле перед проверкой в ​​admin.Как создать настраиваемый метод очистки для сайта администратора?

models.py

class Ad(models.Model): 
    ..... 
    manual_code = models.BooleanField("Manual Code", default=False) 
    code   = models.TextField("Code") 

admin.py

class MyAdAdminForm(forms.ModelForm): 
    class Meta: 
     model = Ad 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     cleaned_data['code'] = "dadad" 
     print cleaned_data 
     return cleaned_data 

class AdAdmin(admin.ModelAdmin): 
    form = MyAdAdminForm 

admin.site.register(Ad, AdAdmin) 

в конце концов, я хочу генерировать это поле весь «код», но я все еще получаю ошибку в админ, что поле является пустым хотя я могу видеть его ценность («дадад») в оболочке.

Я также попытался

def clean_code(self): 

и не звала эту функцию вообще.

и я также попытался

def save_model(request,....): 

в классе AdAdmin, но он не звонил, что либо.

поэтому что делать?

+0

Не следует ли очищать() один уровень отступов, чтобы быть частью MyAdAdminForm? – jpic

+0

у меня в моем коде, я исправлю его здесь. –

ответ

2

Как и вызов вашего пользовательского метода clean, Django проверяет каждое поле формы отдельно. Это отдельная проверка поля, которая вызывает требуемую ошибку поля. Подробные сведения см. В документах Django по адресу Form and field validation.

Если вы не требуете ввода пользователя в поле кода, вы можете переопределить метод формы __init__ и установить required=False.

class MyAdAdminForm(forms.ModelForm): 
    class Meta: 
     model = Ad 

    def __init__(self, *args, **kwargs): 
     super(MyAdAdminForm, self).__init__(*args, **kwargs) 
     self.fields['code'].required = False 

Когда поле не требуется, форма будет вызвать метод clean_code во время проверки, так что вы можете установить значение там.

+0

Я хотел оставить поле обязательным. это была целая проблема. –

+0

Как я понимаю, вы автоматически генерируете значение поля 'code', поэтому вы не требуете ввода пользователем кода. Поэтому для этой формы необходимо, чтобы она была ложной. Если вам требуется, чтобы пользователь вводил значение, то показ ошибки, когда пользователь не ввел значение, кажется правильным. – Alasdair

+0

Я мог бы не генерировать значение поля, если проверено 'manual_code'. поэтому, если пользователь проверил его и не ввел никакого значения для 'code', он должен вернуть им ошибку. –

Смежные вопросы