模型元类与模型形式元类有何不同?
Posted
技术标签:
【中文标题】模型元类与模型形式元类有何不同?【英文标题】:How is model Meta class different from model form Meta class? 【发布时间】:2021-12-15 02:04:15 【问题描述】:我想了解我们在模型中使用的元类。我在文档中找到了它。我记得在模型表单中也添加了元类。似乎模型元类和模型形式元类是不同的。它们有何不同以及模型表单中的元选项是什么。
【问题讨论】:
【参考方案1】:在认识论中,meta 是一个(古)希腊词,意思是关于。因此,它是一个描述模型或ModelForm
的关于 的类。名字基本上是他们唯一的共同点。
模型的Meta
类将指定模型的详细名称等,在相应的数据库表中定义的约束和索引等。Django 文档中有一个section that lists all the Meta
options for a model。
另一方面,ModelForm
的Meta
将向ModelForm
解释它应该如何为给定模型构造表单。通常,Meta
定义了ModelForm
与fields
或exclude
一起构造的模型,它们分别指定要包含/排除的字段。此外,Overriding default fields section of the documentation 列出了所有其他Meta
选项,用户可以(稍微)更改在ModelForm
中定义字段的方式。 source code [GitHub] 还列出了ModelForm
的Meta
的所有选项:
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)
【讨论】:
以上是关于模型元类与模型形式元类有何不同?的主要内容,如果未能解决你的问题,请参考以下文章