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')
在我的模型中,__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')