Чем мета-класс модели отличается от мета-класса формы модели?

#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)