Python 日期范围预取提供多个条目,而不是1个条目

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(

下面返回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('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"]
)