【发布时间】:2011-08-13 05:28:23
【问题描述】:
问题
假设我有三个类 A、B 和 C,其中 B 是 A 的子类,C 是 B 的子类:
A <- B <- C
当我打开管理员并列出所有“A”时,我会看到所有“A”、“B”和“C”。但是,当我点击其中一个链接,查看详细信息并编辑特定 B 时,我只会看到 B 的字段,即使该实例实际上是 C 的实例。 我希望看到的是根据其最具体的类型向我展示的对象。
我正在尝试什么
我使用InheritanceManager 在更抽象的级别工作时将实例转换为正确的类型。这几乎可以正常工作(它不能处理多个继承级别)。但是,即使对于单个继承级别,我也无法在管理员中反映多态行为,因为管理员显然不知道经理的 select_subclasses() 方法。
知道如何在管理员上使用这种类似多态的行为吗?
具体例子
models.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)
更新
从 2010 年开始添加两个线程的链接,并附上一些关于如何使用 django-polymorphic 实现这一点的想法:
【问题讨论】:
标签: django django-models django-admin