Django 1.11如何解决列表过滤器重复项

Django 1.11如何解决列表过滤器重复项,django,list,filter,admin,Django,List,Filter,Admin,在我的模型中,一个_str__self,它从创建响应的日期时间字段派生季度和年份 Models.py 在Admin中,我希望能够根据提交记录的季度筛选记录,我希望根据没有提交特定季度响应的人筛选记录,我认为我可以在以后使用位置良好的波浪线来实现这一点,因此我有以下几点: 管理员 到目前为止,我已经通过def-str提交了四个响应。2018年第一季度,我有2个响应,第二个响应,结果如下所示: 你知道为什么我会得到2018年第一季度的3倍和1倍吗?我只希望过滤器列表中有1个2018年第1季度 奖金问

在我的模型中,一个_str__self,它从创建响应的日期时间字段派生季度和年份

Models.py

在Admin中,我希望能够根据提交记录的季度筛选记录,我希望根据没有提交特定季度响应的人筛选记录,我认为我可以在以后使用位置良好的波浪线来实现这一点,因此我有以下几点:

管理员

到目前为止,我已经通过def-str提交了四个响应。2018年第一季度,我有2个响应,第二个响应,结果如下所示:

你知道为什么我会得到2018年第一季度的3倍和1倍吗?我只希望过滤器列表中有1个2018年第1季度

奖金问题-知道如何通过回复设置过滤器列表中所列项目的数量限制吗?我想将它们限制为最新的4,这可能会有问题,因为我使用的是字符串

编辑

刚才在控制台日志中注意到,过滤器正在使用基于响应ID的GET请求:

"GET /admin/auth/user/?response__id__exact=1 HTTP/1.1" 200 14277
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
"GET /admin/auth/user/?response__id__exact=2 HTTP/1.1" 200 14277
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
"GET /admin/auth/user/?response__id__exact=3 HTTP/1.1" 200 14270
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
"GET /admin/auth/user/?response__isnull=True HTTP/1.1" 200 14599
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
因此,据我所知,by response筛选器显示四个对象的通用名称Q1 2018,这四个对象通过其ID进行区分

如何根据对象的通用名称/自身过滤对象?我猜通过另一个def到Response类?

通常我会保留def\u str\u self:作为我的类的标识。 创建一个

然后用它来过滤:

list_filter = ('response__created', 'Quarter')

你试过distinct吗?我不认为这会改变它,但我会尝试一下。请参阅更新的问题-我在控制台中注意到,筛选时生成的请求与响应id绑定,每个响应id都是不同的。通常我将str保留为我的类的特定标识。。。。您可以为您的季度创建另一个def quarterself,并进行筛选it@Walucas我正要试一下,这是有道理的。把它作为一个答案添加进来,我会在稍后检查结果。我真的认为这会起作用,但不幸的是,得到了以下错误-FieldError:无法将关键字'quarter'解析到字段中。选项包括:答案、已创建、id、访谈id、调查、调查id、已更新、用户、用户id。它正在访问已创建的响应模型字段、id、访谈id、调查、更新、用户,但不访问季度定义?我先尝试了caps,你是否删除了def最新的_响应,obj:?这个错误是由于这个,我想是的。这个答案有助于解决问题-
"GET /admin/auth/user/?response__id__exact=1 HTTP/1.1" 200 14277
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
"GET /admin/auth/user/?response__id__exact=2 HTTP/1.1" 200 14277
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
"GET /admin/auth/user/?response__id__exact=3 HTTP/1.1" 200 14270
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
"GET /admin/auth/user/?response__isnull=True HTTP/1.1" 200 14599
"GET /admin/jsi18n/ HTTP/1.1" 200 3217
def Quarter(self): 
    msg = u"Q%d %d" %(((self.created.month-1)//3)+1, self.created.year)
    return msg
list_filter = ('response__created', 'Quarter')