gpt4 book ai didi

Django search_fields 如果有 .annotate,则将 DUPLICATE 左外连接添加到 Django 查询

转载 作者:行者123 更新时间:2023-12-05 07:26:25 25 4
gpt4 key购买 nike

Django search_fields 添加 DUPLICATE left outer join with appliance 表到 Django 查询,因为它有 .annotate(appliances_count=Count('appliances'))

查看

class AppliancePoolViewSet(VneCommonViewSet):
serializer_class = vne_serializers.AppliancePoolSerializer
search_fields = ('pk', 'name', 'notes', 'appliances__name')

# filter appliance pools by customer
def get_queryset(self):
customer = getattr(self.request.user, 'customer', None)
if not customer:
return models.AppliancePool.objects.none()
return models.AppliancePool.objects.filter(
customer=1).prefetch_related('appliances'
).annotate(appliance_count=Count('appliances'))

首先它为注释添加连接,随后 search_field 也再次添加相同的连接,因为它有字段“appliances__name”,这导致 appliance_count 的数据不正确。

如何限制 Django 过滤器使用 search_fields 属性添加的重复连接?

最佳答案

使用Django ORM有一些注意事项:

  1. 首先,表连接将被复制: https://docs.djangoproject.com/en/3.0/topics/db/queries/#spanning-multi-valued-relationships

我还发现,当我们在不同的地方使用相同的 relation 时,它会受到影响,例如:过滤、注释Django 会认为所有这些都是单一的,不应该合并

  1. 深入研究 Django 代码后,我发现: https://docs.djangoproject.com/en/3.0/ref/models/querysets/#filteredrelation-objects

这将有助于避免跨越关系,我们将只有 1 个表连接。

抱歉,我的帖子不会对案例有帮助:prefetch_related希望这会对其他人有所帮助,因为我在搜索 https://code.djangoproject.com/ticket/18437 的解决方案时找到了这个

关于Django search_fields 如果有 .annotate,则将 DUPLICATE 左外连接添加到 Django 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54346160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com