In Django admin, can I require fields in a model but not when it is inline? In Django admin, can I require fields in a model but not when it is inline? django django

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.