【发布时间】:2021-12-15 02:04:15
【问题描述】:
我想了解我们在模型中使用的元类。我在文档中找到了它。我记得在模型表单中也添加了元类。似乎模型元类和模型形式元类是不同的。它们有何不同以及模型表单中的元选项是什么。
【问题讨论】:
标签: django-models django-forms metaclass
我想了解我们在模型中使用的元类。我在文档中找到了它。我记得在模型表单中也添加了元类。似乎模型元类和模型形式元类是不同的。它们有何不同以及模型表单中的元选项是什么。
【问题讨论】:
标签: django-models django-forms metaclass
在认识论中,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)
【讨论】: