Python Django-如何使用MTI从父类对象获取子类型对象?

Python Django-如何使用MTI从父类对象获取子类型对象?,python,django,inheritance,multi-table-inheritance,Python,Django,Inheritance,Multi Table Inheritance,我有一个函数,get_priority(),它对父类(块)中的所有对象进行排序,以获得最高的“优先级”对象。现在我想得到与超类对象相关的子类对象 这表明我可以通过使用子类的小写名称来实现这一点。例如,如果子类是Concept,我可以执行以下操作: chunk = get_priority(Chunk.objects.all()) chunk.concept 然而,子类可以是概念、代码、公式或问题。对于每个子类,使用try/except是实现此目的的唯一方法,例如: chunk = get_pr

我有一个函数,
get_priority()
,它对父类(块)中的所有对象进行排序,以获得最高的“优先级”对象。现在我想得到与超类对象相关的子类对象

这表明我可以通过使用子类的小写名称来实现这一点。例如,如果子类是Concept,我可以执行以下操作:

chunk = get_priority(Chunk.objects.all())
chunk.concept
然而,子类可以是概念、代码、公式或问题。对于每个子类,使用try/except是实现此目的的唯一方法,例如:

chunk = get_priority(Chunk.objects.all())
    try: 
         object = chunk.concept
    except:
        pass
    try:
        object = chunk.code
    except:
        pass
    # etc.

我推断块对象具有优先级属性。 如果这是真的,为了对块的查询集进行排序,您应该使用:

Chunk.objects.order_by('-priority')
关于问题本身,请看:。您可以为所有子类设置相同的引用名称

此外,我将建议您考虑django的两个范围的建议:

多表inherance,有时被称为“具体inherance”,被作者和许多其他开发人员认为是一件坏事。我们强烈建议不要使用它


我认为这不是检查孩子是什么样的最好方法,或者至少不是最简单的方法

我想您有自己的自定义方法可以在
get_priority()
上获取块优先级(我个人会将其放在块对象管理器上),因此为了获得正确的子对象,我会这样做:

chunk = get_priority(Chunk.objects.all())

object = None
for attr in ('concept', 'code', 'formula', 'problem'):
    if hasattr(chunk, attr):
        object = getattr(chunk, attr)
最后,您将在
对象
变量中有子对象,或者如果没有子对象,您可以在
对象
中处理结果,例如,如果没有找到子对象,则抛出异常,或者仅通过
传递