在django中过滤嵌套(外键)查询集

时间:2018-06-18 08:21:20

标签: django django-queryset

我在Django中有一个查询集:

    models.User:
       id = pk
       username = text

    models.Offer
       id = pk
       user = Fk(User)
       description = text

    my serializer is:

    class UserOfferSerializer(ModelSerializer):
        offers = OfferSerializerAll(many=True, read_only=True)
        class Meta:
            model = User
            fields = ('id', 'username', 'offers')

我试图通过描述文本中出现的一段文字来过滤它,它很简单(过滤第一级对象,用户),但后来我想过滤每个用户的优惠并取回用户与想要的优惠。 我在尝试:

queryset.filter(offers__description__icontains = sometext)

但是我得到了用户提供的所有优惠。

任何帮助,谢谢!!

1 个答案:

答案 0 :(得分:1)

要使用自定义查询集限制相关商品,您可以将prefetch_relatedPrefetch对象一起使用:

from django.db.models import Prefetch

User.objects.filter(offers__description__icontains=sometext).prefetch_related(Prefetch('offers', queryset=Offer.objects.filter(description__icontains=sometext)))