首页 > 解决方案 > 在 django 中过滤嵌套(外键)查询集

问题描述

我在 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)

但我得到了用户他拥有的所有优惠。

任何帮助,谢谢!

标签: djangodjango-queryset

解决方案


要使用自定义查询集限制相关优惠,您可以使用prefetch_related对象Prefetch

from django.db.models import Prefetch

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

推荐阅读