Django Form Inheritance

Form inheritance (docs) in Django is extremely straightforward:

class EnhancedModelForm(ModelForm):
class SuperEnhancedModelForm(EnhancedModelForm):

view raw
forms.py
hosted with ❤ by GitHub

You can also subclass the parent’s Meta inner class if you want to change the Meta.fields or Meta.excludes lists:

class EnhancedModelForm(ModelForm):
class Meta:
model = MyModel
fields = ('field1', 'field2')
class SuperEnhancedModelForm(EnhancedModelForm):
class Meta(EnhancedModelForm.Meta):
model = MyModel
fields = ('field3', 'field4')

view raw
forms.py
hosted with ❤ by GitHub

But what if you want to add to the fields rather than replace them? This is actually straightforward as well:

class EnhancedModelForm(ModelForm):
class Meta:
model = MyModel
fields = ('field1', 'field2')
class SuperEnhancedModelForm(EnhancedModelForm):
class Meta(EnhancedModelForm.Meta):
model = MyModel
fields = EnhancedModelForm.Meta.fields + ('field3', 'field4')

view raw
forms.py
hosted with ❤ by GitHub

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s