(这似乎是基于"可能已经有你的答案的问题"列表的常见问题,但这些都没有帮助我。
我有几个具有多表继承的模型。
在 admin(以及以后的前端应用程序中)中,我需要有一个基类中所有内容的列表,并且还能够识别它们属于哪个子(或孙子)类。
我正在为此尝试使用继承管理器。到目前为止没有运气。
class Entry(models.Model):
name = models.CharField(max_length=200)
description = models.TextField(max_length=500)
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
slug = models.SlugField(unique=True)
objects = InheritanceManager()
def get_queryset(self, request):
qs = self.model.objects.get_queryset()
ordering = self.get_ordering(request)
if ordering:
qs = qs.order_by(*ordering)
return qs
def __str__ (self):
return self.name + " entry"
class Person(Entity):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
def __str__ (self):
return self.name + " Person"
添加字符串"person"和"Entry"只是一个测试。
实体列表只是显示Entry
,即使(实际上)也是一个人。
我希望能够在Entry.__str__
中写一些东西来显示最终的子类。这样我就可以得到一个条目列表并查看:
Bob (Person)
ABC Co. (Organization)
Great Expectations (Book)
我遇到了同样的问题,并以一种或另一种方式发现了黑客。但它从来没有感觉干净。我最终使用了django-polymorphic...
当我们存储从项目模型继承的模型时...
Project.objects.create(topic="Department Party") ArtProject.objects.create(topic="Painting with Tim", artist="T. Turner") ResearchProject.objects.create(topic="Swallow Aerodynamics", supervisor="Dr. Winter")
。并且想要检索我们所有的项目,返回子类化模型!
Project.objects.all() [ <Project: id 1, topic "Department Party">, <ArtProject: id 2, topic "Painting with Tim", artist "T. Turner">, <ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. Winter"> ]
使用vanilla Django,我们得到了基类对象,这很少是我们想要的:
Project.objects.all() [ <Project: id 1, topic "Department Party">, <Project: id 2, topic "Painting with Tim">, <Project: id 3, topic "Swallow Aerodynamics"> ]
希望对您有所帮助!