W admin django istnieją pola, które chciałbym wymagać, jeśli model jest edytowany jako samodzielny. Jeśli jest wbudowany, nie chcę, aby były wymagane. Czy jest jakiś sposób na zrobienie tego?W administratorze Django, czy mogę wymagać pól w modelu, ale nie wtedy, gdy jest on wbudowany?
Odpowiedz
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
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.
Dziękuję bardzo – Mitch