Python 日期范围预取提供多个条目,而不是1个条目
下面返回3个对象,但这应该只有1个。因为只有1个InsiderTrading对象具有这些过滤器,但有3个所有者Python 日期范围预取提供多个条目,而不是1个条目,python,django,python-3.x,django-views,Python,Django,Python 3.x,Django Views,下面返回3个对象,但这应该只有1个。因为只有1个InsiderTrading对象具有这些过滤器,但有3个所有者 quarter_trading_2018q1 = InsiderTrading.objects.filter( issuer=company_issuer.pk, owners__company=company.pk, transaction_date__range=["2018-01-01", "2018-03-30"] ).prefetch_related(
quarter_trading_2018q1 = InsiderTrading.objects.filter(
issuer=company_issuer.pk,
owners__company=company.pk,
transaction_date__range=["2018-01-01", "2018-03-30"]
).prefetch_related('owners')
但是,如果我删除所有者公司过滤器,则返回1(正确行为)
但我仍然想筛选所有者公司,那么如何返回1?您应该添加一个
如果
distinct
有效:这意味着此查询的结果为
InsiderTrading.objects.filter(
issuer=company_issuer.pk,
owners__company=company.pk,
transaction_date__range=["2018-01-01", "2018-03-30"]
)
有多个结果,而不是一个
Django docs州
选择_related()“遵循”外键关系,选择
执行查询时的其他相关对象数据
prefetch_related()为每个关系执行单独的查找,并且
在Python中执行“连接”
我会说使用选择与之相关的。
检查
另一个解决方案是使用group\u by
owner\u id.可以发布模型结构吗?
InsiderTrading.objects.filter(
issuer=company_issuer.pk,
owners__company=company.pk,
transaction_date__range=["2018-01-01", "2018-03-30"]
).distinct().prefetch_related('owners')
InsiderTrading.objects.filter(
issuer=company_issuer.pk,
owners__company=company.pk,
transaction_date__range=["2018-01-01", "2018-03-30"]
)