Python Django';s内省管理员:它是如何工作的?

Python Django';s内省管理员:它是如何工作的?,python,django,Python,Django,我真的不想知道Django,实际上我对管理员更感兴趣。我感兴趣的是他们如何反思模型以创建管理员后端 我浏览了Django的源代码,发现了一些信息,但由于这是一个如此大的项目,我想知道是否有一些较小的例子说明他们是如何做到的 这只是为了更好地理解Python的个人项目。我认为学习内省对象是一个很好的方法。这可能会让你开始: >>> class Foo: ... x = 7 ... >>> f = Foo() >>> dir(f) ['__d

我真的不想知道Django,实际上我对管理员更感兴趣。我感兴趣的是他们如何反思模型以创建管理员后端

我浏览了Django的源代码,发现了一些信息,但由于这是一个如此大的项目,我想知道是否有一些较小的例子说明他们是如何做到的


这只是为了更好地理解Python的个人项目。我认为学习内省对象是一个很好的方法。

这可能会让你开始:

>>> class Foo:
...   x = 7
...
>>> f = Foo()
>>> dir(f)
['__doc__', '__module__', 'x']
>>> getattr(f, 'x')
7

这可能会让您开始:

>>> class Foo:
...   x = 7
...
>>> f = Foo()
>>> dir(f)
['__doc__', '__module__', 'x']
>>> getattr(f, 'x')
7

对于Django来说,它实际上不仅仅是一种内省。模型使用一个元类来注册自己,我将为您省去所有涉及的复杂性,但是管理员不会在您浏览模型时反省模型

相反,注册过程在模型上创建一个
\u meta
对象,其中包含管理和ORM所需的所有数据。您可以在
django/db/models/base.py
中看到
ModelBase
元类,正如您在
\uuuuu new\uuuuu
函数中看到的那样,它遍历所有字段,将它们添加到
\u meta
对象中。
\u meta
对象本身是使用模型上的
meta
类定义动态生成的


你可以通过
print SomeModel.\u meta
print SomeModel.\u meta.fields

看到结果,Django实际上比内省多一点。模型使用一个元类来注册自己,我将为您省去所有涉及的复杂性,但是管理员不会在您浏览模型时反省模型

相反,注册过程在模型上创建一个
\u meta
对象,其中包含管理和ORM所需的所有数据。您可以在
django/db/models/base.py
中看到
ModelBase
元类,正如您在
\uuuuu new\uuuuu
函数中看到的那样,它遍历所有字段,将它们添加到
\u meta
对象中。
\u meta
对象本身是使用模型上的
meta
类定义动态生成的


您可以使用
print SomeModel.\u meta
print SomeModel.\u meta.fields

查看结果如果您真的想了解它的工作原理以便学习Python,我建议您查看源代码。事实上,它有很好的文档记录


如果您真的想了解它的工作原理以便学习Python,我建议您查看源代码。事实上,它有很好的文档记录


我有一个小问题。为什么在声明Foo时没有括号?我在Django模型的Meta类中也看到了这一点。该类的父类将放在
类Foo
后面的括号中。如果没有父母,你可以让父母离开。总是有一个
对象的父对象
我有一个小问题。为什么在声明Foo时没有括号?我在Django模型的Meta类中也看到了这一点。该类的父类将放在
类Foo
后面的括号中。如果没有父母,你可以让父母离开。将始终拥有
对象的父对象
感谢您的建议。我已经在做这件事了,但是Django项目是一个巨大而广阔的地方,让我对Python的知识感到好奇。它很大,但结构也很好。依我看,能够阅读和理解代码是行业中最重要的技能。和所有技能一样,学习这些技能需要时间和练习。谢谢你的建议。我已经在做这件事了,但是Django项目是一个巨大而广阔的地方,让我对Python的知识感到好奇。它很大,但结构也很好。依我看,能够阅读和理解代码是行业中最重要的技能。就像所有技能一样,学习这些技能需要时间和实践。