django - 在 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)
但我得到了用户他拥有的所有优惠。
任何帮助,谢谢!
解决方案
要使用自定义查询集限制相关优惠,您可以使用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)))
推荐阅读
- java - WiFi MAC地址在关于手机>状态中不可用
- python - Discord.py - 检查用户是否具有执行命令的特定角色
- python-3.x - 用Python分割文件时,Grep命令找不到单词
- ruby-on-rails - 'bash' : 没有这样的文件或目录
- python - 尝试仅从 FTP 文件夹下载特定文件
- apache-nifi - 如何根据Nifi流中的给定年份范围获取每个月的第一个日期
- excel - sumproduct 作为字符串
- git - 在删除本地 Git 存储库之前,请检查是否没有丢失任何内容
- javascript - IE中的隐藏元素导致表单提交
- java - 任何 Hamcrest 匹配器,用于检查集合是否完全由 x,y 元素组成,无论顺序和基数如何