2009-06-29 6 views

Antwort

16

Während Daniel Rosemans Antwort funktioniert, ist es nicht die beste Lösung. Es erfordert ein wenig Code-Duplizierung, indem Sie das Formularfeld erneut deklarieren müssen. Wenn Sie zum Beispiel ein verbose_name für dieses Feld hatten, müssten Sie auch label='My verbose_name already set on model' zur Zeile CharField hinzufügen, da bei einer erneuten Deklaration des gesamten Feldes grundsätzlich alles gelöscht wird, was in Ihrem Modell für dieses Feld eingestellt ist.

Der bessere Ansatz besteht darin, die Methode __init__ des Formulars zu überschreiben und field.required explizit auf True oder False zu setzen.

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

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

Sicher. Definieren Sie einfach ein benutzerdefiniertes Formular, wobei Ihr erforderliches Feld überschrieben wird, um required = True zu setzen, und verwenden Sie es in Ihrer Admin-Klasse.

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 

Also hier verwendet MyAdmin das überschriebene Formular, aber MyInlineAdmin ist nicht.

+0

Vielen Dank – Mitch

Verwandte Themen