Django的内省管理员:它是如何工作的?

时间:2010-11-05 18:22:54

标签: python django

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

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

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

3 个答案:

答案 0 :(得分:4)

对于Django来说,它实际上比内省更多。模型使用元类来注册自己,我将免除所有涉及的复杂性,但管理员在浏览模型时内省模型。

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

您可以使用print SomeModel._metaprint SomeModel._meta.fields

查看结果

答案 1 :(得分:1)

这可能会让你开始:

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

答案 2 :(得分:0)

如果您真的想知道如何学习Python,我建议您查看源代码。它实际上已经很好地记录了。

http://code.djangoproject.com/browser/django/trunk/django/contrib/admin