2012-05-17 24 views
5

Chcę wypełnić pole przed zatwierdzeniem w admin.Jak utworzyć niestandardową metodę czyszczenia dla witryny administratora?

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) 

ostatecznie chcę generować ten cały "Kod", ale nadal jestem uzyskiwanie błąd admin, że pole jest puste chociaż widzę jego wartość ("dadad") w powłoce.

Próbowałem też

def clean_code(self): 

i nie było wywołanie tej funkcji w ogóle.

i ja też próbowałem

def save_model(request,....): 

w klasie AdAdmin ale nie dzwoni, że albo.

Co więc powinienem zrobić?

+0

Nie należy czyścić() ma jeden poziom wcięcia, aby być częścią MyAdAdminForm? – jpic

+0

ma w moim kodzie, poprawię to tutaj. –

Odpowiedz

2

Oprócz wywoływania niestandardowej metody clean, Django sprawdza indywidualnie każde pole formularza. To pojedyncza kontrola pola powoduje wystąpienie wymaganego błędu pola. Aby uzyskać szczegółowe informacje, zobacz dokumentację Django pod numerem Form and field validation.

Jeśli nie wymaga się wprowadzania danych przez użytkownika w polu kodu, można zastąpić metodę formularza __init__ i ustawić 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 

Gdy pole nie jest wymagane, forma będzie wywołać metodę clean_code podczas walidacji, więc można ustawić wartość tam.

+0

Chciałem zachować wymagane pole. to był cały problem. –

+0

Jak rozumiem, automatycznie generujesz wartość pola 'code', więc nie musisz wprowadzać kodu. Dlatego wymagane powinno być fałszywe dla tego formularza. Jeśli nie chcesz, aby użytkownik wprowadził wartość, wyświetlenie błędu, gdy użytkownik nie wprowadził wartości, wydaje się być prawidłowym zachowaniem. – Alasdair

+0

Mogę nie wygenerować wartości pola, jeśli jest zaznaczone 'manual_code'. więc jeśli użytkownik zaznaczył to i nie wstawił żadnej wartości dla 'code', powinien zwrócić błąd. –

Powiązane problemy