我有以下型号:Django的子查询过滤器从现场
class Domain(models.Model):
name = models.CharField(...)
plan = models.ForeignKey(Plan, ....)
class Plan(models.Model):
name = models.CharField(...)
num_ex_accounts = models.IntegerField(...)
class PlanDetails(models.Model):
accounts = models.IntegerField()
plan = models.ForeignKey(Plan, ....)
class Mailbox(models.Model):
domain = models.ForeignKey(Domain, ...)
任何领域有计划,有计划有这对于使用域创建邮箱帐户值N计划的细节,我想在超过账户价值查询集域来获得,使用原始SQL的SQL是这样的:
domains = Domain.objects.filter(
Q(
PlainDetails.objects.filter(plan = Domain.plan).aggregate(Sum('accounts'))
<=
Mailbox.objects.filter(domain = Domain).count()
)
)
:
SELECT domain
FROM domain, plan
WHERE plan.id = domain.plan_id
AND (
SELECT SUM(accounts)
FROM plandetails WHERE plandetails.plan_id=plan.id
)
<=
(
SELECT COUNT(*)
FROM mailbox WHERE mailbox.domain_id=domain.id
)
我在Django这样的尝试
但不起作用,它会引发关于Domain.plan的错误,有没有办法在子查询中引用父查询中的字段值?这个查询集是有效的还是有另一种(更好)的方法?或者我应该只使用原始的sql,在这种情况下最好的选择是什么?
什么是paret查询?也是完全可以使用原始查询,当你必须 – e4c5
对不起,我的意思是**家长**查询 – Peter