我有3个型号:优惠,请求和分配。分配在请求和要约之间建立连接。现在我想这样做:
select *
from offer as a
where places > (
select count(*)
from assignment
where offer_id = a.id and
to_date > "2014-07-07");
我不确定如何使用django QuerySet实现这一点...任何提示?
编辑:上面的查询只是一个例子,一般来说查询应该是什么样子。 django模型看起来像这样:
class Offer(models.Model):
...
places = models.IntegerField()
...
class Request(models.Model):
...
class Assignment(models.Model):
from_date = models.DateField()
to_data = models.DateField()
request = models.ForeignKey("Request",related_name="assignments")
offer = models.ForeignKey("Offer",related_name="assignments")
人们现在可以创建具有给定数量的地点或请求的要约。然后,管理员将在给定时间内将请求与要约连接起来。这将保存为作业。上面的查询应该会给我一个优惠清单,其中还有剩下的地方。因此,我想计算给定报价的有效分配数,以将其与其位数进行比较。此列表应用于查找给定请求创建新分配的可能要约。
我希望这能更好地描述问题。
答案 0 :(得分:0)
不幸的是,ORM操作不直接支持相关子查询。在这种情况下,应该可以使用.extra(where=...)
。
要在不使用子查询的情况下获得相同的结果,以下内容应该起作用:
Offer.objects.filter(
assignment__to_date__gt=thedate
).annotate(
assignment_cnt=Count('assignment')
).filter(
assignment_cnt__lte=F('places')
)
确切的查询取决于模型定义。
答案 1 :(得分:-1)
query = '''select *
from yourapp_offer as a
where places > (
select count(*)
from yourapp_assignment
where offer_id = a.id and
to_date > "2014-07-07");'''
offers = Offer.objects.raw(query):