如果我在Django中有两个模型,$gateways = Import-CSV '.\perlaw.csv'
$ports = 22, 80, 8080, 443, 4443, 3389
foreach ($gateway in $gateways) {
$scriptblock = {
param (
$gateway,
$ports,
$path
)
foreach ($port in $ports) {
$result = Test-NetConnection $gateway.'connection gateway' -Port $port;
$out = @(
$gateway.'group id',
$gateway.'connection gateway',
$port
)
$output = "{0}, {1}, {2}" -f $out
if ($result.TcpTestSucceeded) {
Out-File -FilePath $path\$($gateway.'group id').csv -InputObject $output -NoClobber -Append;
}
}
}
Start-Job -ScriptBlock $scriptblock -ArgumentList $gateway, $ports, (Get-Location).Path
}
和Parent
,其中Child
与Child
具有外键关系,如下所示:
Parent
如何找到所有具有至少两个class Parent(models.Model):
parent_name = models.CharField(max_length=128, blank=False, default='no name')
class Child(models.Model):
child_name = models.CharField(max_length=128, blank=False, default='no name')
parent = models.ForeignKey('app.Parent', on_delete=models.CASCADE, null=False)
记录的Parent
条记录?理想情况下,该解决方案将在Child
上使用单个.filter()
语句。
答案 0 :(得分:1)
您可以注释Child
的数量,然后根据该数量进行过滤,例如:
from django.db.models import Count
Parent.objects.annotate(
nchild=Count('child')
).filter(nchild__gt=1)
这将生成如下查询:
SELECT parent.*, COUNT(child.id) AS nchild
FROM parent
LEFT OUTER JOIN child ON parent.id = child.parent_id
GROUP BY parent.id
HAVING COUNT(child.id) > 1
一个人可以将.filter(..)
的条件更改为关于孩子数nchilds
的各种条件,例如,nchild=4
过滤器上有四个孩子的Parent
上,而~Q(nchild=7)
将排除所有Parent
个正好有七个孩子的孩子。因此,我们可以制作更复杂的过滤器。