In Django admin, can I require fields in a model but not when it is inline?
While Daniel Roseman's answer works, it's not the best solution. It requires a bit of code duplication by having to re-declare the form field. For example, if you had a verbose_name
on that field, you would also have to add label='My verbose_name already set on model'
to the CharField
line, since re-declaring the whole field basically erases everything set on your model for that field.
The better approach is to override the form's __init__
method and explicitly set field.required
to True
or False
there.
class MyModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(MyModelForm, self).__init__(*args, **kwargs) self.fields['myfield'].required = True
Sure. Just define a custom form, with your required field overridden to set required=True, and use it in your admin class.
from django import formsclass MyForm(forms.ModelForm): required_field = forms.CharField(required=True) class Meta: model = MyModelclass MyAdmin(admin.ModelAdmin): form = MyFormclass MyInlineAdmin(admin.ModelAdmin): model = MyModel
So here MyAdmin is using the overridden form, but MyInlineAdmin isn't.