在我的模型中, __ 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 过滤器显示四个对象的公用名(Q1 2018)(以ID标识)。
如何根据公共名称/ self过滤对象?我想通过另一个def到Response类?
答案 0 :(得分:1)
通常我保留def __str__(self):
作为我班级的身份证明。
创建一个
def Quarter(self):
msg = u"Q%d %d" %(((self.created.month-1)//3)+1, self.created.year)
return msg
然后用它来过滤:
list_filter = ('response__created', 'Quarter')