Python ForeignKey的Django filter()返回不正确的queryset

Python ForeignKey的Django filter()返回不正确的queryset,python,sql,django,django-models,orm,Python,Sql,Django,Django Models,Orm,我有两个模型,产品模型通过ForeignKey连接到ProductGroup,产品模型还有一个名为shop的ForeignKey字段: 让我们假设,我有两个产品实例,连接到特定的商店,还有一个ProductGroup,连接到这两个产品实例 所以现在我想得到所有ProductGroup实例,它们与特定的shop实例相关 我所做的: product_group_list = ProductGroup.objects.filter(product__shop=shop_inst) 我认为我会得到:

我有两个模型,产品模型通过ForeignKey连接到ProductGroup,产品模型还有一个名为shop的ForeignKey字段:

让我们假设,我有两个产品实例,连接到特定的商店,还有一个ProductGroup,连接到这两个产品实例

所以现在我想得到所有ProductGroup实例,它们与特定的shop实例相关

我所做的:

product_group_list = ProductGroup.objects.filter(product__shop=shop_inst)
我认为我会得到:

<QuerySet [<ProductGroup: Product Group test product group>]>
但不幸的是,我明白了:

<QuerySet [<ProductGroup: Product Group test product group>, <ProductGroup: Product Group test product group>]>
所以它返回给我这两个连接到产品实例的ProductGroup实例的queryset

如何改进对DB的查询以仅获取一个连接到此商店的ProductGroup实例?因为ProductGroup数据库中只有一条记录,所以在查询中使用distinct消除重复项

返回在其SQL查询中使用SELECT DISTINCT的新查询集。 这将从查询结果中消除重复的行

默认情况下,查询集不会消除重复的行。实际上,, 这很少是一个问题,因为诸如 Blog.objects.all不会引入重复结果的可能性 排。但是,如果查询跨越多个表,则可以 在计算查询集时获取重复结果。那时候你会 使用不同的

在查询中使用distinct以消除重复项

返回在其SQL查询中使用SELECT DISTINCT的新查询集。 这将从查询结果中消除重复的行

默认情况下,查询集不会消除重复的行。实际上,, 这很少是一个问题,因为诸如 Blog.objects.all不会引入重复结果的可能性 排。但是,如果查询跨越多个表,则可以 在计算查询集时获取重复结果。那时候你会 使用不同的

由于加入,它多次返回同一ProductCategory,您可以使用。不同:

由于加入,它多次返回同一ProductCategory,您可以使用。不同:


您使用的是PostgresSQL还是MySQL。distinct只在PostgresSQL中有效。我使用的是MySQL抱歉-我认为我的评论有误导性。过去我认为distinct在MySQL上不起作用。也许我误读了什么。你在用PostgresSQL还是MySQL。distinct只在PostgresSQL中有效。我使用的是MySQL抱歉-我认为我的评论有误导性。过去我认为distinct在MySQL上不起作用。也许我误读了什么。
<QuerySet [<ProductGroup: Product Group test product group>, <ProductGroup: Product Group test product group>]>
product_group_list = ProductGroup.objects.filter(product__shop=shop_inst).distinct()
product_group_list = ProductGroup.objects.filter(product__shop=shop_inst).distinct()