Django 管理搜索 - 当 search_field 包含多对多时返回重复项

问题描述 投票:0回答:1

我在使用 Django 管理搜索时收到多个重复的对象。

我涉及两个模型。组织和OrgAlias(组织别名)。每个组织可以有多个别名,每个别名可以附加到多个组织。

型号:

class OrgAlias(models.Model):
    name = models.CharField(max_length=255,unique=True)
    def __str__(self):
            return self.name
class Organisation(models.Model):
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False)
    aliases = models.ManyToManyField(OrgAlias)
    ...

我的 Django 管理类:

class OrganisationAdmin(admin.ModelAdmin):
    search_fields = ['aliases__name']
    ...

我尝试使用各种策略覆盖 ModelAdmin get_search_results 函数。例如

    def get_search_results(self, request, queryset, search_term):
        queryset, use_distinct = super().get_search_results(request, queryset, search_term) 
        queryset = queryset.distinct()
        return queryset, use_distinct

结果总是一样的。如果我有 3 个别名附加到组织上。该组织将在搜索结果中出现 3 次。

类似的查询在 shell 中运行良好。只是在 django admin 中出现了问题。

有没有简单的修复或解决方法?

django django-admin
1个回答
0
投票

总结: 我相信重复是预期的行为。

我有多个与组织相关的别名(或名称)。如果我在多对多别名字段上使用任何排序(例如 order_by)功能,则每个别名将出现在订单中的不同位置是有意义的。因此每个别名都有一个重复。

我正在更改模型以使用非多对多方法进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.