#django-models #django-forms #metaclass
Вопрос:
Я хотел понять метаклассы, которые мы используем в модели. Я нашел об этом в документах. Я помню, как добавлял метакласс и в модельные формы. Похоже, что метакласс модели и метакласс формы модели отличаются. Чем они отличаются и каковы мета-параметры в форме модели.
Ответ №1:
В эпистемологии мета-это (древняя) Греческое слово означает «около«. Таким образом, это класс, который что-то говорит о модели или ModelForm
. Название-это, по сути, единственное, что у них есть общего.
Meta
Класс модели будет указывать подробное имя и т. Д. Модели, ограничения и индексы, определенные в соответствующей таблице базы данных и т. Д. В документации Django есть раздел, в котором перечислены все Meta
параметры модели.
С Meta
ModelForm
другой стороны, a объяснит ModelForm
, как он должен построить форму для данной модели. Обычно это Meta
определяет модель, для которой ModelForm
она строится вместе с fields
или exclude
, которые указывают, какие поля включать/исключать соответственно. Кроме того, в разделе Переопределение полей по умолчанию документации перечислены все другие Meta
параметры, в которых пользователь может (незначительно) изменить способ определения полей в ModelForm
. В исходном коде [GitHub] также перечислены все параметры для Meta
ModelForm
:
class ModelFormOptions: def __init__(self, options=None): self.model = getattr(options, 'model', None) self.fields = getattr(options, 'fields', None) self.exclude = getattr(options, 'exclude', None) self.widgets = getattr(options, 'widgets', None) self.localized_fields = getattr(options, 'localized_fields', None) self.labels = getattr(options, 'labels', None) self.help_texts = getattr(options, 'help_texts', None) self.error_messages = getattr(options, 'error_messages', None) self.field_classes = getattr(options, 'field_classes', None)