在Django中获取继承的模型对象

发布于 2021-01-29 15:57:36

我有一个具有以下模型的django应用程序:

对象 A 是从Model扩展而来的简单对象,具有几个字段,比方说,特定的对象是一个名为 “ NAME” 的char字段和一个名为
ORDER”
的Integer字段。 A 是抽象的,意味着数据库中没有 A 对象,而是…

对象 BCA的特化对象 ,这意味着它们从 A 继承而来 并添加了其他字段。

现在,假设我需要所有其字段 名称 以字母 “ Z” 开头并由 ORDER 字段排序的对象,但是对于这些对象,我也希望所有特定于
BC的 字段。现在,我看到两种方法:

a)分别对 BC 对象进行查询,并获取两个列表,合并它们,手动排序并对其进行处理。

b)查询 A* 对象以 “ ORDER 排序的以 “ Z” 开头的名称,结果查询 BC
对象以携带所有剩余数据。
*

两种方法听起来都效率很低,在第一种方法中,我必须自己订购它们,在第二种方法中,我必须多次查询数据库。

我是否缺少一种神奇的方法来获取所有 BC 对象(以一种方法排序)?还是至少比上述两种方法更有效的方法?

提前致谢!

布鲁诺

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果A可以的话,您可以使用进行一次查询select_related

    from django.db import connection
    q = A.objects.filter(NAME__istartswith='z').order_by('ORDER').select_related('b', 'c')
    for obj in q:
       obj = obj.b or obj.c or obj
       print repr(obj), obj.__dict__ # (to prove the subclass-specific attributes exist)
    print "query count:", len(connection.queries)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看