从django list_filter中删除重复项

时间:2012-05-18 16:49:03

标签: django django-admin

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

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

A的管理员中,我正在list_filterB__val,但结果是为每个A列出的重复B满足过滤值。

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

1 个答案:

答案 0 :(得分:2)

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

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

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 ]