【问题标题】:Syntax for connecting models to admin, Django将模型连接到管理员的语法,Django
【发布时间】:2018-01-17 21:32:19
【问题描述】:

我已经学习 python 几个月了,并开始修补 Django。在发布此之前,我阅读了 github 上自动生成的“admin.py”代码,并在 Google 上搜索了此事。看来我的问题有点具体,坦率地说,我对那个具体的阅读感到非常困惑。因此,我希望提出这个问题可以为这个美好的社区增加价值。问题:

将模型连接到管理页面时,在 admin.py 中,首先导入 admin:

从 django.contrib 导入管理员

在此之后,您导入模型。然后,您应该通过以下方式连接您的模型:

admin.site.register(模型)

我不明白“site.register”是什么。该行以“管理员”开头的事实。非常有意义,因为您正在指定以下导入(例如“admin.function”或“admin.class”)的来源。如果它只是'admin.somefunctionfromadmin',我会完全理解这一点。现在,相反,我对“sites.register”是什么感到困惑。 “站点”是一个模块、一个文件,而“注册”是该模块内的一个函数吗?如果是这样,那是什么让'管理员'?一袋?

我在 Django 中看到过类似的行,感觉有点困惑。

谢谢!

【问题讨论】:

    标签: python django


    【解决方案1】:

    admin.siteAdminSite 类的默认实例。在django.contrib.admin.sites 中是instantiated

    那么importeddjango/contrib/admin/__init__.py 中。当您完成 from django.contrib import admin 后,它可以作为 admin.site 使用。

    当您调用admin.site.register(Model) 时,您正在调用此管理站点实例的register 方法。

    【讨论】:

    • 感谢您的详尽回答。澄清一下:site 是 AdminSite 类的一个实例,在 sites.py 中实例化。 Admin.py 继承自 sites.py,因此可以在 django.contrib.admin 的 init 方法中导入它。然后,在 admin.site.register(Model) 中,register 是站点实例(属于 AdminSite 类)中的一个方法,我将模型名称作为参数传递。这是一个正确的理解吗?
    • 我不确定您的描述Admin.py 继承自sites.py 从而使其成为可能。请注意,当您调用 admin.site.register() 时,您并没有传递模型名称(例如 "MyModel"),而是传递了实际的模型类。除此之外,我想你已经明白了。
    • 好的,我现在明白了。 Admin 不是一个文件,而是一个目录。关于 init.py 文件,我这样理解对不对:没有它,Admin 将不会被视为一个包,并且无法从例如站点导入。此外,init 允许我导入函数和类等,从而使它们更容易在脚本中导入(可以使用“admin.site”而不是“admin.sites.site”)。如果这是真的,我想我已经完全明白了!太感谢了!真的。谢谢谢谢谢谢。
    • 是的,__init__.py 用于简化导入。注意as of Python 3.3__init__.py 不是必须要做成包的。
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2013-02-10
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多