Bru*_*uno 8 python django inheritance model
我有一个django应用程序与以下模型:
对象A是一个简单的对象,它从带有几个字段的Model扩展而来,比方说,一个特定的字段是一个名为"NAME"的字段和一个名为"ORDER"的整数字段.A是抽象的,意味着数据库中没有A对象,而是......
对象B和C是A的特化,意味着它们从A继承并且它们添加了一些其他字段.
现在假设我需要所有字段NAME以字母"Z"开头的对象,由ORDER字段排序,但我也想要那些对象的所有B和C特定字段.现在我看到两种方法:
a)单独为B和C对象执行查询并获取两个列表,合并它们,手动排序并使用它.
b)查询以"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)
Run Code Online (Sandbox Code Playgroud)