You are creating a
ModelForm subclass. A model form has to have a model to work from, and the
Meta object configures this.
Configuration like this is grouped into the
Meta class to avoid name clashes; that way you can have a
model field in your form without that interfering with the configuration. In other words, by using
class Meta: you get a nested namespace used just to configure the
ModelForm in relation to the model.
The namespace for the
ModelForm class body itself then (outside
Meta) is reserved for the form fields themselves, as well as form methods. You’d normally just let
ModelForm generate those fields from your model, but you can, in principle, add fields to this. Another reason to put fields in the class is to completely replace any of the generated fields with your own version.
From the Model Forms documentation:
ModelFormis a regular
Formwhich can automatically generate certain fields. The fields that are automatically generated depend on the content of the
Metaclass and on which fields have already been defined declaratively. Basically,
ModelFormwill only generate fields that are missing from the form, or in other words, fields that weren’t defined declaratively.
Fields defined declaratively are left as-is, therefore any customizations made to
Metaattributes such as
error_messagesare ignored; these only apply to fields that are generated automatically.
ModelForm expects the configuration to be set under the
Meta name, you can’t just remove that and put
fields in the
ModelForm class itself; that’s just the wrong place.