本文介绍了如何在Django中基于子项过滤父项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个

from django.db import models

class Kid(models.Model):
    name = models.CharField(max_length=200)

class Toy(models.Model):
    name = models.CharField(max_length=200)
    owner = models.ForeignKey(Kid)

我有此查询集

孩子= Kid.objects.all()

现在我想过滤整个孩子玩具中的名称为 star

Now i want to filter kids whole toys has name star in it

,但我无法决定要应用哪个过滤器

and i am not able to decide which filter to apply

kids.filter(toys_set__icontains ='star')

推荐答案

Kid.objects.distinct().filter(toy__name__icontains='star')

请注意 distinct()方法。这是必需的,因为孩子可以有几个明星玩具,因此如果没有 distinct(),您将在查询集中获得重复项。

Note the distinct() method. It is required because kid can have several "star" toys so without distinct() you will get duplicates in the queryset.

如果您要在使用:

Kid.objects.distinct().filter(toy__name__icontains='star') \
                      .annotate(toys_num=Count('toy')).filter(toys_num__gt=4)

这篇关于如何在Django中基于子项过滤父项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 08:45