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

Rod*_*kar 2 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')
Run Code Online (Sandbox Code Playgroud)

我试图通过描述文本中出现的一段文本来过滤它,这很简单(过滤第一级对象,即用户),但随后我想过滤每个用户的报价并返回具有所需的用户优惠。我在尝试:

queryset.filter(offers__description__icontains = sometext)
Run Code Online (Sandbox Code Playgroud)

但我向用户提供了他拥有的所有优惠。

任何帮助,谢谢!

nev*_*ner 6

要使用自定义查询集限制相关优惠,您可以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)))
Run Code Online (Sandbox Code Playgroud)