我在django app中有这些表:
class Order(models.Model):
...
class SubOrder1(models.Model):
order = models.ForeignKey(Order, blank=True, null=True)
class SubOrder2(models.Model):
order = models.ForeignKey(Order, blank=True, null=True)
...
如何在Order上编写一个查询,该查询只产生至少有一个相关SubOrder1或SubOrder2的订单?我需要像
这样的东西Order.objects.filter(suborder__count__ge = 1, ...)
我使用的是Django = 1.9.2和Python = 3.4.1
答案 0 :(得分:2)
使用isnull字段查找:
orders_with_suborders = Order.objects.filter(
Q(suborder1__isnull=False) | Q(suborder2__isnull=False)
)
答案 1 :(得分:1)
Annotate your queryset包含相关模型的计数:
distinct=True
请参阅有关combining multiple aggregations的文档,以解释我们需要Q
然后,您可以使用orders_with_suborders = queryset.filter(
Q(num_suborder1__gte=1) | Q(num_suborder1=1__gte=1),
)
过滤其中任何一个计数至少为1的对象。
SubOrder1
答案 2 :(得分:0)
我刚发现的解决方案就像:
Order.objects.filter(suborder1__id__gt = -1)
我可以使用相同的SubOrder2。这是一个解决方案,但不是真正的djangonic。有没有更好的解决方案?
答案 3 :(得分:-1)
您可以从Order
转到order = Order.objects.get(pk=pk)
suborders1 = order.suborder1_set.all()
。
for suborder in suborders1:
print (suborder)
然后你可以遍历子订单:
private preview(url):Promise<any> {
http.get(url, {withCredentials: false})
.toPromise()
.etc ...
希望对你有帮助