gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:06 25 4
gpt4 key购买 nike

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

Django docs on Multi-Table Inheritance表明我可以通过使用子类的小写名称来做到这一点。例如,如果子类是 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.

最佳答案

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

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

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

object = None
for attr in ('concept', 'code', 'formula', 'problem'):
if hasattr(chunk, attr):
object = getattr(chunk, attr)

最后,您将在 object 变量中拥有子级,如果没有子级,则为 None,然后您可以在 中使用结果对象,如果没有找到子对象或只是通过,则抛出异常。

关于python - Django - 如何使用 MTI 从父类对象获取子类型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40513766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com