我在使用 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 中出现了问题。
有没有简单的修复或解决方法?
总结: 我相信重复是预期的行为。
我有多个与组织相关的别名(或名称)。如果我在多对多别名字段上使用任何排序(例如 order_by)功能,则每个别名将出现在订单中的不同位置是有意义的。因此每个别名都有一个重复。
我正在更改模型以使用非多对多方法进行排序。