django 管理中的多态行为

2024-04-21

问题

假设我有三个类A、B和C,其中B是A的子类,C是B的子类:

A <- B <- C

当我打开管理并列出所有“A”时,我看到所有“A”、“B”和“C”。但是,当我点击其中一个链接查看详细信息并编辑该特定 B 时,我只会看到 B 的字段,即使该实例实际上是 C 的实例。 我希望看到的是根据其最具体的类型向我展示的对象。

我正在尝试什么

我在用着继承管理器 https://stackoverflow.com/questions/929029/how-do-i-access-the-child-classes-of-an-object-in-django-without-knowing-the-name/929982#929982在更抽象的级别上工作时将实例转换为正确的类型。这几乎可以很好地工作(它不能处理多个继承级别)。但是,即使对于单个继承级别,我也无法在管理员中反映多态行为,因为显然管理员不知道经理的select_subclasses()方法。

关于如何在管理员上获得这种类似多态的行为的任何想法?

具体例子

模型.py:

from django.db import models
from model_utils.managers import InheritanceManager

class A(models.Model):
    a_field = models.CharField(max_length=200)
    objects = InheritanceManager()

class B(A):
    b_field = models.CharField(max_length=200)

class C(B):
    c_field = models.CharField(max_length=200)

admin.py

from myapp.models import A, B, C
from django.contrib import admin

admin.site.register(A)
admin.site.register(B)
admin.site.register(C)

Update

添加到 2010 年的两个线程的链接,以及关于如何使用 django-polymorphic 实现此目的的一些想法:

  • http://groups.google.com/group/django-polymorphic/browse_frm/thread/84290fe76c40c12d http://groups.google.com/group/django-polymorphic/browse_frm/thread/84290fe76c40c12d
  • http://groups.google.com/group/django-polymorphic/browse_frm/thread/8332d9a71daa7fc5 http://groups.google.com/group/django-polymorphic/browse_frm/thread/8332d9a71daa7fc5

这个答案是片面的,因为我无法重现你的第一个问题。当我列出父模型对象时,我会看到所有它们。 (或者可能存在一些误会。)


字段不完整的问题可以通过内联管理部分解决。由于子类只是一个具有隐式 OneToOneField 到父模型的模型,因此您可以为“C”定义内联,然后将其包含到inlinesB 的管理员属性。

问题是:

  • 用户将无法通过 B 的管理中的内联创建“C”类的对象;只能通过 C 的管理员来完成。仅供观看。
  • 它不适用于多个继承级别:您可以将 B 作为内联包含到 A 的管理中,但我知道没有简单的方法将 C 作为内联包含到 B 的内联中。

另一种方法是修改 A 的管理模板,在其中放置一个指向真实实例(无论是 B 还是 C)的链接。但我想你已经想到了。


关于最后一个问题:如果您想修改某些模型管理员的查询集,可以通过 ModelAdmin 来完成queryset()方法(参见示例这个问题 https://stackoverflow.com/questions/2279313/how-to-limit-queryset-the-records-to-view-in-django-admin-site)。您可以在模型的管理员和位置上覆盖此方法select_subclasses()逻辑在那里。但我还没有尝试过,所以我不能说如果你这样做的话 ModelAdmin 的行为会是什么。也许您需要重写一些方法。


附言。我目前使用django-polymorphic,从事具有具体继承的类似项目。它也没有提供任何通过管理员管理多态模型的方法,所以我决定不再过多依赖 Django 的管理员,而只是为站点工作人员创建一个简单的自定义界面,我想这不会花费太多时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django 管理中的多态行为 的相关文章

  • 如何使用UpdateView?

    我有两个可能相关的 UpdateView 问题 首先 它不是更新用户而是创建一个新的用户对象 其次 我无法限制表单中显示的字段 这是我的观点 py class RegistrationView FormView form class Reg
  • 如何将变量传递给 django 中的所有模板? [复制]

    这个问题在这里已经有答案了 我正在尝试将变量 浏览器变量 传递给我的应用程序中的所有模板 关于如何让它发挥作用有什么建议吗 View def browser request primary cat list Categories objec
  • Django HTTPS 和 HTTP 会话

    我使用 Django 1 1 1 和 ssl 重定向中间件 通过 HTTPS 创建的会话数据 身份验证等 在站点的 HTTP 部分中不可用 无需将整个站点设置为 HTTPS 即可使其可用的最佳方法是什么 这是设计使然 您无法轻易更改 当通过
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • “WSGIRequest”对象没有属性“successful_authenticator”

    我已经创建了一个像这样的身份验证类 RESTful API 的令牌身份验证 是否应该定期更改令牌 https stackoverflow com questions 14567586 token authentication for res
  • django AuditTrail 与还原

    我正在开发一个新的网络应用程序 我需要将数据库中的任何更改存储到审核表中 此类审计表的目的是 稍后在真正的物理审计中 我们可以确定在某种情况下发生了什么 谁编辑了什么以及数据库当时的状态是什么 复杂的计算 所以大多数审计表将被写入而不是读取
  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • 如何在 Django 中使每五个帖子成为广告帖子

    我正在尝试允许用户赞助帖子 以便为该帖子带来更多点击量 我想让每五个帖子成为赞助帖子 但如果我尝试在模板中使用可整除并循环浏览广告 那么它将发布all第四个帖子后的广告 这是我尝试过的一些代码 编辑 我已将问题更改为不会显示帖子的问题 有人
  • 将 python 字典中的数据呈现给 django 模板。

    我有一本字典 data sok 1 10 sao 1 10 sok sao 2 20 我如何 循环字典 将我的数据作为 HTML 表呈现给 Django 模板 这种格式为表格 author qty Amount sok 1 10 sao 1
  • 如何在 Django QuerySet 中将 DateField() + TimeField() 转换为本地时间?

    我的模型为这些字段 date models DateField 开始时间 models TimeField 结束时间 models TimeField 我想用以下方式注释查询集start datetime and end datetime
  • 更新序列化器时,嵌套序列化器没有实例(many = true)

    我有 UserSerializer 和嵌套的 UserClientSerializer 我正在尝试更新已登录用户的信息 但我收到 unique together 验证错误 我有以下型号 模型 py class UserClients mod
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • Django内联外键与父主键不匹配

    我需要一些帮助来解决使用内联表单的 django 错误 我似乎无法弄清楚这一点 如果我能在尝试验证之前弄清楚如何执行此操作 我可能可以强制插入 eventID 当我提交表单时 出现错误 Hidden field event The inli
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页

随机推荐