使用Django ORM在select中选择

时间:2012-10-04 10:59:37

标签: python django select orm

我在哪里可以找到有关构建此类查询的一些信息:

select
  SomeField1,
  (select count(distinct SomeField2) from SomeTable where SomeCondition) as SomeField3
from
  SomeTable2
where
  SomeCondition2

使用Django ORM?它可能在某个地方的Django文档中,但我找不到它。

3 个答案:

答案 0 :(得分:0)

Django的ORM旨在以每个模型为基础执行查询及其关系数据(即ForeignKey,ManyToManyRelationship,...)。您的示例显示,您需要从两个不相关的模型同时获得两个结果。 AFAIK,除了单独做之外没有办法做到这一点

count = SomeTable.objects.filter(SomeCondition).distinct(SomeField2).count()
somefield1 = SomeTable2.objects.filter(SomeCondition2)

但是,如果你真的需要这样做,有几种方法可以实现它,但我不推荐它们:

Django Queryset across Models?

Query field across multiple django models

答案 1 :(得分:0)

你的两张桌子有什么关系?

我想你需要计数,有一个没有检查的代码片段,

SomeModel2.objects.annotate(new_field=Count('SomeField2', 
    distinct=True)).filter(condition=condition,
    another_condition=condition2).values('new_field', 'Somefield1')

有关详细信息,请参阅https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotateHow to sort by annotated Count() in a related model in Django

答案 2 :(得分:0)

由于你的问题特别是 ,你可以找到这些信息,看一下Aggregation | Django docs - 它应该可以帮助你实现你在这里尝试的一些东西(特别是,数)

然而,将不相关的表一起查询并不是一件很常见的事情。您最好手动进行单独的查询并将返回的数据放在一起,因为无论如何您的数据库都会拆分该查询。

在您的情况下,如果您必须运行该查询,我会建议您在数据库中make raw SQL queries