我有以下型號: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