常见问题:管理员 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/faq/admin
跳转至:导航、​搜索

常见问题:管理员

我无法登录。 当我输入有效的用户名和密码时,它只会再次显示登录页面,没有错误消息。

登录 cookie 设置不正确,因为 Django 发送的 cookie 域与浏览器中的域不匹配。 尝试设置 :setting:`SESSION_COOKIE_DOMAIN` 设置以匹配您的域。 例如,如果您要在浏览器中访问“https://www.example.com/admin/”,请设置 SESSION_COOKIE_DOMAIN = 'www.example.com'


我无法登录。 当我输入有效的用户名和密码时,它再次显示登录页面,并显示“请输入正确的用户名和密码”错误。

如果您确定您的用户名和密码正确,请确保您的用户帐户将 is_activeis_staff 设置为 True。 管理站点只允许访问这两个字段都设置为 True 的用户。


如何自动将字段的值设置为上次在管理员中编辑对象的用户?

ModelAdmin 类提供自定义挂钩,允许您使用请求中的详细信息在对象保存时对其进行转换。 通过从请求中提取当前用户,并自定义 save_model() 钩子,您可以更新对象以反映编辑它的用户。 有关示例,请参阅 关于 ModelAdmin 方法 的文档。


如何限制管理员访问权限,以便对象只能由创建它们的用户编辑?

ModelAdmin 类还提供自定义挂钩,允许您控制管理中对象的可见性和可编辑性。 使用从请求中提取用户的相同技巧,get_queryset()has_change_permission() 可用于控制管理中对象的可见性和可编辑性。


我的管理站点 CSS 和图像使用开发服务器显示正常,但在使用 mod_wsgi 时没有显示。

请参阅“How to use Django with mod_wsgi”文档中的 提供管理文件


我的“list_filter”包含一个 ManyToManyField,但过滤器不显示。

如果相关对象少于两个,Django 不会为 ManyToManyField 显示过滤器。

例如,如果您的 list_filter 包含 sites,并且您的数据库中只有一个站点,则它不会显示“站点”过滤器。 在这种情况下,按站点过滤将毫无意义。


某些对象未出现在管理中。

不一致的行计数可能是由于缺少外键值或外键字段错误地设置为 null=False。 如果您有一个 ForeignKey 指向一个不存在的对象的记录,并且包含的外键是 list_display,则该记录将不会显示在管理更改列表中,因为 Django 模型正在声明未在数据库级别实现的完整性约束。


如何自定义管理界面的功能?

你有几个选择。 如果您想搭载 Django 自动生成的添加/更改表单,您可以通过模型的类 Admin js 参数 将任意 JavaScript 模块附加到页面。 该参数是一个 URL 列表,作为字符串,指向将通过 <script> 标签包含在管理表单中的 JavaScript 模块。

如果您希望通过调整自动生成的表单获得更多的灵活性,请随时为管理员编写自定义视图。 管理员由 Django 本身提供支持,您可以编写挂钩到身份验证系统的自定义视图,检查权限并执行他们需要执行的任何其他操作。

如果您想自定义管理界面的外观,请阅读下一个问题。


动态生成的管理站点很丑! 我怎样才能改变它?

我们喜欢它,但如果您不同意,您可以通过编辑 CSS 样式表和/或相关图像文件来修改管理站点的演示文稿。 该站点是使用语义 HTML 和大量 CSS 挂钩构建的,因此您可以通过编辑样式表进行任何更改。


使用管理员支持哪些浏览器?

管理员为最新版本的符合 Web 标准的现代浏览器提供全功能体验。 在桌面上,这意味着 Chrome、Edge、Firefox、Opera、Safari 等。

在移动和平板设备上,管理员为符合 Web 标准的浏览器提供响应式体验。 这包括 Android 和 iOS 上的主要浏览器。

根据功能支持, 可能 浏览器之间存在细微的风格差异。 这些被认为是渲染中可接受的变化。