Python 什么';Django模型和字段的机制背后是什么?

Python 什么';Django模型和字段的机制背后是什么?,python,django,design-patterns,Python,Django,Design Patterns,框架的Django模型/字段部分背后的Django/Python机制是什么 确切地说,我想知道Django如何解析(?)类定义,然后知道需要哪些字段 来自django.db导入模型的 等级车(型号.型号): name=models.CharField(最大长度=255,null=True,blank=True) 生产年份=models.DateField(null=True) #其余的领域。。。 我认为Django Forms framework或DRF序列化程序背后也存在同样的机制。我查看了

框架的Django模型/字段部分背后的Django/Python机制是什么

确切地说,我想知道Django如何解析(?)类定义,然后知道需要哪些字段

来自django.db导入模型的

等级车(型号.型号):
name=models.CharField(最大长度=255,null=True,blank=True)
生产年份=models.DateField(null=True)
#其余的领域。。。
我认为Django Forms framework或DRF序列化程序背后也存在同样的机制。我查看了这些项目的回购协议,但仍然找不到任何合理的起点

我的问题中有一个架构问题。我认为我需要实现类似于此机制的东西:

类字段:
定义初始化(self,标签:str,必需:bool=True,**kwargs):
self.label,self.required=标签,required
类别字段(字段):
定义初始值(自身,最大长度:int,**kwargs):
self.max\u length=最大长度
超级()
类别日期字段(字段):
...
类布尔字段(字段):
...
类别模型:
#我不了解这些机制
类MyModelInstance(模型):
name=CharField(…)
#等等。
我需要的是真正简单的解决方案,知道该字段是必需的。但正如我之前所说,我并没有那么先进,我真的很感激任何提示


<>编辑:我想我是在寻找Django形式的机制,而不是模型/领域。

形式和模型遵循相同的基本思想,但是形式稍微简单一点,所以让我们去参观一下。

在上使用。
它在声明时收集
字段
s(通过一些MRO遍历,但基本思想是查看它们是否是
isinstance(x,field)
),将它们从具体的类声明中移除,并将它们移动到
cls.base\u字段
(其中
cls
是您要声明的类)

当您实例化新的
表单
时,deepcopies将
self.base_字段
(位于类级别,但这并不重要)复制到
self.fields
(这样您就可以安全地修改每个表单实例中的
self.fields

基本上就是这样,真的

除此之外,如果您想要在一个单独的属性上收集所需字段,那应该是

cls.required_fields={f代表cls.base_fields中的f,如果f.required}

< p>表单和模型遵循相同的基本思想,但是窗体稍微简单一点,所以让我们去参观一下。

在上使用。
它在声明时收集
字段
s(通过一些MRO遍历,但基本思想是查看它们是否是
isinstance(x,field)
),将它们从具体的类声明中移除,并将它们移动到
cls.base\u字段
(其中
cls
是您要声明的类)

当您实例化新的
表单
时,deepcopies将
self.base_字段
(位于类级别,但这并不重要)复制到
self.fields
(这样您就可以安全地修改每个表单实例中的
self.fields

基本上就是这样,真的

除此之外,如果您想要在一个单独的属性上收集所需字段,那应该是

cls.required_fields={f代表cls.base_fields中的f,如果f.required}