在Django Unite中,动态数量的QuerySet

时间:2018-09-28 13:05:07

标签: django django-models django-orm

在我的Django应用程序中,我有一个带有“ UnitNodes”,“ Persons”和“ PersonUnitRelations”的模型。我希望选择与单位清单有关的所有人员。我认为,如果我只能在一个数据库查询中执行操作,那将是最有效的。因此,我提出了一些与此类似的代码:

#! /bin/bash
    sshpass -p 'remotepassword' ssh -o StrictHostKeyChecking=no root@xxx.xxx.xxx.xxx
    ls -l /var/
    sudo mkdir /var/mydirectories

这会创建一些大型查询,我想知道是否还有更好的方法。

1 个答案:

答案 0 :(得分:1)

两个查询

是的,只需使用__in [Django-doc]查找:

qs = Person.objects.filter(personunitrelation__unit_node__in=unitqs)

这将导致十种结果:

SELECT p.*
FROM person AS p
JOIN personunitrelation AS pur ON pur.person_id = p.id
WHERE pur.unit_node_id IN (14, 25)

其中1425id中的假设 UnitNode s。因此,这将需要两个查询:一个要获取UnitNode,而另一个要获取Person

一个查询

如果您对unitqs不感兴趣,可以在这里甚至将其设为单个查询:

Person.objects.filter(
    personunitrelation__unit_node__translations__title__icontains="ceres"
)

这将导致类似的结果

SELECT p.*
FROM person AS p
JOIN personunitrelation AS pur ON pur.person_id = p.id
JOIN unit_node AS un ON pur.unit_node = un.id
JOIN ON translation AS t ON t.unit_node = un.id
WHERE t.title LIKE '%ceres%'

(简体版)