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

Bru*_*uno 8 python django inheritance model

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

对象A是一个简单的对象,它从带有几个字段的Model扩展而来,比方说,一个特定的字段是一个名为"NAME"的字段和一个名为"ORDER"的整数字段.A是抽象的,意味着数据库中没有A对象,而是......

对象BCA的特化,意味着它们从A继承并且它们添加了一些其他字段.

现在假设我需要所有字段NAME以字母"Z"开头的对象,由ORDER字段排序,但我也想要那些对象的所有BC特定字段.现在我看到两种方法:

a)单独为BC对象执行查询并获取两个列表,合并它们,手动排序并使用它.

b)查询以"ORDER "排序的以"Z"开头的名称对象,并且结果查询BC对象以带来所有剩余数据.

这两种方法听起来都非常低效,在我必须自己订购的第一种方法中,在第二种方法中,我必须多次查询数据库.

有没有一种神奇的方式来获取所有BC对象,用一种方法排序?或者至少比这两者提到的更有效的方法呢?

提前致谢!

布鲁诺

DrM*_*ers 6

如果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)

  • 聪明。可怕,但是聪明。但是,当A为抽象时将不起作用吗? (2认同)