模型元类与模型形式元类有何不同?

     2023-02-23     175

关键词:

【中文标题】模型元类与模型形式元类有何不同?【英文标题】: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。

另一方面,ModelFormMeta 将向ModelForm 解释它应该如何为给定模型构造表单。通常,Meta 定义了ModelFormfieldsexclude 一起构造的模型,它们分别指定要包含/排除的字段。此外,Overriding default fields section of the documentation 列出了所有其他Meta 选项,用户可以(稍微)更改在ModelForm 中定义字段的方式。 source code [GitHub] 还列出了ModelFormMeta 的所有选项:

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)

【讨论】:

Python 元类有啥用?

】Python元类有啥用?【英文标题】:WhatarePythonmetaclassesusefulfor?Python元类有什么用?【发布时间】:2011-01-0115:06:26【问题描述】:不能以任何其他方式使用的元类可以做什么?AlexMartelli告诉这里有些任务没有元类就无法完成Pythonme... 查看详情

django 模型元类的标准文档字符串是啥?

】django模型元类的标准文档字符串是啥?【英文标题】:Whatisthestandarddocstringforadjangomodelmetaclass?django模型元类的标准文档字符串是什么?【发布时间】:2016-11-3019:02:02【问题描述】:django中的模型可以带有这样的元类:classAddress... 查看详情

在 Groovy 中,实例的元类与其类的元类有啥区别

】在Groovy中,实例的元类与其类的元类有啥区别【英文标题】:InGroovywhat\'sthedifferencebetweenaninstance\'smetaClassanditsclass\'smetaClass在Groovy中,实例的元类与其类的元类有什么区别【发布时间】:2016-03-1911:54:35【问题描述】:见以下代... 查看详情

子类 Django ModelBase(Django 模型的元类)

】子类DjangoModelBase(Django模型的元类)【英文标题】:SubclassDjangoModelBase(metaclassforDjangomodels)【发布时间】:2016-02-2101:41:48【问题描述】:我希望我的一些Django模型具有“所有者”属性。稍后我可能需要更改或扩充逻辑,并且该... 查看详情

一个子类化 abc 的 django 模型,给出了元类冲突

】一个子类化abc的django模型,给出了元类冲突【英文标题】:Adjangomodelthatsubclassesanabc,givesametaclassconflict【发布时间】:2012-02-0203:56:07【问题描述】:我有以下模型和抽象基类importabcfromdjango.dbimportmodelsclassAbstractBase():__metaclass__=abc... 查看详情

如何做类似 Django 模型的元类技巧

】如何做类似Django模型的元类技巧【英文标题】:HowtodoDjango-models-likemetaclasstrick【发布时间】:2015-03-1508:46:51【问题描述】:我正在为我的学习项目制作类似于ORM的Django,因为我们不允许使用现有的ORM(如果你想使用一个,你必... 查看详情

16元类(代码片段)

...方法(上)14内置方法(中)之描述符15内置方法(下)16元类一知识储备exec:三个参数   参数一:字符串形式的命令   参数二:全局作用域(字典形式),如果不指定,默认为glob 查看详情

Python 元类与类装饰器

】Python元类与类装饰器【英文标题】:Pythonmetaclassesvsclassdecorators【发布时间】:2010-12-1906:13:25【问题描述】:Python元类和类装饰器之间的主要区别是什么?有什么我可以用一个做而另一个不能做的事情吗?【问题讨论】:【参... 查看详情

将元类与多重继承结合使用的 TypeErrors

】将元类与多重继承结合使用的TypeErrors【英文标题】:TypeErrorsusingmetaclassesinconjunctionwithmultipleinheritance【发布时间】:2011-01-1307:42:18【问题描述】:我有两个关于元类和多重继承的问题。第一个是:为什么我会得到类Derived的TypeE... 查看详情

Ruby中Base的元类和Derived类有啥关系?

】Ruby中Base的元类和Derived类有啥关系?【英文标题】:WhatistherelationshipbetweenthemetaclassofBaseandDerivedclassinRuby?Ruby中Base的元类和Derived类有什么关系?【发布时间】:2011-01-0910:04:18【问题描述】:在Ruby中,我们可以在单例方法中使用... 查看详情

markdownpythonmetaclass元类与对象的关系,抽象类(代码片段)

查看详情

在类似 django 的表单实现中使用元类有啥好处?

】在类似django的表单实现中使用元类有啥好处?【英文标题】:Whataretheadvantagesofusingmetaclassesindjango-likeformimplementations?在类似django的表单实现中使用元类有什么好处?【发布时间】:2011-07-2517:47:39【问题描述】:首先是一些背景... 查看详情

Python 子类跟踪 - 元类与内置

】Python子类跟踪-元类与内置【英文标题】:PythonSubclassTracking-MetaclassesvsBuiltin【发布时间】:2012-03-2617:26:03【问题描述】:对于Django选项卡库,我创建了一个使用标记子类跟踪的架构。为此,我创建了一个基类,然后从中派生所... 查看详情

参数化类和元类有啥区别(请使用 Python 中的代码示例)?

】参数化类和元类有啥区别(请使用Python中的代码示例)?【英文标题】:Whatisthedifferencebetweenaparameterizedclassandametaclass(codeexamplesinPythonplease)?参数化类和元类有什么区别(请使用Python中的代码示例)?【发布时间】:2011-03-3014:09... 查看详情

Groovy 元类与 Java 8 的互操作性

】Groovy元类与Java8的互操作性【英文标题】:GroovymetaclassinteroperabilitywithJava8【发布时间】:2014-05-1009:12:54【问题描述】:简介:我正在开发一个名为awaitility的Java库,它也有一个Groovy扩展。在Java8之前,您可以像这样使用该库://... 查看详情

用于预定义类创建的元类与继承

】用于预定义类创建的元类与继承【英文标题】:Metaclassvsinheritanceforpredefinedclasscreation【发布时间】:2019-01-2603:48:58【问题描述】:我正在为一个程序编写一些代码,该程序将能够运行一些软件、读取输入/输出并在此过程中进... 查看详情

Ruby 元类疯狂

...在尝试动态定义一个类方法,但我无法理解ruby​​元类模型。考虑以下类:classExampledefself.meta;(class<<self;self;end);enddefself.class_instance;self;endendExample.class_ins 查看详情

Java 实现 - 元类

...:2012-03-0919:00:03【问题描述】:按照我的理解,Java对象模型是3个级别,每个级别描述它下面的级别,因此所有Classes共享一个Meta类(它们本身是对象?)。我的问题是-Java中的构造函数是如何实现的?(或任何其他类方法)我的... 查看详情