在我的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
这会创建一些大型查询,我想知道是否还有更好的方法。
答案 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)
其中14
和25
是id
中的假设 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%'
(简体版)