2009-06-29 13 views

Odpowiedz

16

Podczas gdy odpowiedź Daniela Rosemana działa, nie jest to najlepsze rozwiązanie. Wymaga to trochę duplikacji kodu, ponieważ musi ponownie zadeklarować pole formularza. Na przykład, jeśli masz na tym polu verbose_name, musisz również dodać label='My verbose_name already set on model' do linii CharField, ponieważ ponowne deklarowanie całego pola spowoduje zasadniczo usunięcie wszystkich elementów ustawionych w modelu dla tego pola.

Lepszym rozwiązaniem jest zastąpienie metody formularza __init__ i jawne ustawienie field.required na True lub False tam.

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyModelForm, self).__init__(*args, **kwargs) 

     self.fields['myfield'].required = True 
9

Pewnie. Po prostu zdefiniuj niestandardowy formularz, z wymaganym polem nadpisanym, aby ustawić required = True, i użyj go w swojej klasie administratora.

class MyForm(forms.ModelForm): 
    required_field = forms.CharField(required=True) 

    class Meta: 
     model = MyModel 

class MyAdmin(admin.ModelAdmin): 
    form = MyForm 


class MyInlineAdmin(admin.ModelAdmin): 
    model = MyModel 

W tym miejscu MyAdmin używa formularza nadpisanego, ale MyInlineAdmin nie jest.

+0

Dziękuję bardzo – Mitch

Powiązane problemy