我有以下 django 模型管理器:
class EntityManager(models.Manager):
...
def filter(self, uuid, *args, **kwargs):
entity_qs = EmptyQuerySet()
for Model in entity_classes:
count = Model.objects.filter(uuid=uuid, *args, **kwargs).count()
if count:
entity_qs = Model.objects.filter(uuid=uuid, *args, **kwargs)
break
return entity_qs
uuid
field 是跨不同模型的公共字段,并且在它们之间是唯一的。上面代码的想法是获取不同模型的行数,当它为正时,然后返回实际查询集,该查询集将在评估时返回必要的实例。所以在更糟糕的情况下,我们将对len(entity_classes)
结果查询集评估执行 SELECT statements + 1 select。
问题是:是否可以使用 django orm 以比我更有效的方式通过一个公共字段过滤不同的模型?