Django 1.11 如何解决 list_filter 重复

Django 1.11 how to resolve list_filter duplicates

在我的模型中,__str__(self) 从响应的 DateTimeField 中导出季度和年份已 创建

Models.py

class Response(models.Model):

    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        msg = u"Q%d %d" %(((self.created.month-1)//3)+1, self.created.year)
        return msg

在管理员中,我希望能够根据提交记录的季度过滤记录(实际上,我想根据没有提交回复的人进行过滤对于一个特定的季度,我认为我可以通过放置适当的波浪号来实现),所以我有以下内容:

Admin.py

class UserAdmin(admin.ModelAdmin):

    list_display = ('username', 'latest_response')
    list_filter = ('response__created', 'response')

    def latest_response(self, obj):
        return obj.response_set.latest('created')

到目前为止,我已经在测试中提交了四个回复(通过 def __str__ 我有 2 x "Q1 2018" 和 2 x “-”) ,结果如下所示:

知道为什么我得到 3 x "Q1 2018" 和 1 x “-”吗?我只想要过滤器列表中的 1 x "Q1 2018"

奖金问题 - 知道如何限制 filter_list 中列出的项目数量(通过响应)吗?我想将它们限制为最新的 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 过滤器显示了四个对象(按 ID 区分)的通用名称(2018 年第一季度)。

如何根据对象的共同点 name/self 过滤对象?我想通过另一个 def 来响应 class?

通常我会保留 def __str__(self): 作为我的 class 的标识。 创建一个

def Quarter(self): 
    msg = u"Q%d %d" %(((self.created.month-1)//3)+1, self.created.year)
    return msg

然后用它来过滤:

list_filter = ('response__created', 'Quarter')