我真的不想知道Django我实际上对管理员更感兴趣。我感兴趣的是他们如何反省模型来创建管理员后端。
我浏览了Django源代码,发现了一些信息,但由于这是一个很大的项目,我想知道是否有更小的例子,他们是如何做到的?
这只是一个更好地理解Python的个人项目。我认为学习内省物体是一种很好的方法。
答案 0 :(得分:4)
对于Django来说,它实际上比内省更多。模型使用元类来注册自己,我将免除所有涉及的复杂性,但管理员在浏览模型时不内省模型。
相反,注册过程会在模型上创建一个_meta
对象,其中包含admin和ORM所需的所有数据。您可以在ModelBase
中看到django/db/models/base.py
元类,正如您在__new__
函数中看到的那样,它遍历所有字段以将它们添加到_meta
对象中。 _meta
对象本身是使用模型上的Meta
类定义动态生成的。
您可以使用print SomeModel._meta
或print 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