2

我在 django admin 中对相关对象的字段使用列表过滤器。

class A(models.Model):
   #..
   pass
class B(models.Model):
   fk = models.ForeignKey(A)
   val models.CharField(max_length=1)

在 admin 中A,我正在尝试list_filteron B__val,但结果是A为每个B满足过滤器值的内容列出了 duplicate 。

有没有一种简单的方法可以拦截查询结果以删除重复项?

4

1 回答 1

2

管理源确实尝试添加.distinct(),但由于某种原因错过了它(一定是错误?)。

我通过以下方式获得了我正在寻找的行为:

class NoDuplicates(ChangeList):
    def __init__(self, *args):
        super(NoDuplicates,self).__init__(*args)

    def get_query_set(self):
        return super(NoDuplicates,self).get_query_set().distinct()

class AAdmin(admin.ModelAdmin):
    def get_changelist(self, request, **kwargs):
        return NoDuplicates

    list_filter = [ B__val ]
于 2012-05-19T17:08:46.833 回答