在Django中获取继承的模型对象
我有一个具有以下模型的django应用程序:
对象 A 是从Model扩展而来的简单对象,具有几个字段,比方说,特定的对象是一个名为 “ NAME” 的char字段和一个名为 “
ORDER” 的Integer字段。 A 是抽象的,意味着数据库中没有 A 对象,而是…
对象 B 和 C 是 A的特化对象 ,这意味着它们从 A 继承而来 , 并添加了其他字段。
现在,假设我需要所有其字段 名称 以字母 “ Z” 开头并由 ORDER 字段排序的对象,但是对于这些对象,我也希望所有特定于
B 和 C的 字段。现在,我看到两种方法:
a)分别对 B 和 C 对象进行查询,并获取两个列表,合并它们,手动排序并对其进行处理。
b)查询 A* 对象以 “ ORDER ” 排序的以 “ Z” 开头的名称,结果查询 B 和 C
对象以携带所有剩余数据。 *
两种方法听起来都效率很低,在第一种方法中,我必须自己订购它们,在第二种方法中,我必须多次查询数据库。
我是否缺少一种神奇的方法来获取所有 B 和 C 对象(以一种方法排序)?还是至少比上述两种方法更有效的方法?
提前致谢!
布鲁诺
-
如果
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)