【问题标题】:Django 1.11 how to resolve list_filter duplicatesDjango 1.11 如何解决 list_filter 重复项
【发布时间】:2018-07-17 14:47:49
【问题描述】:

在我的模型中,一个 __str__(self) 从创建响应时的 DateTimeField 中派生出季度和年份。 p>

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 中,我希望能够根据提交记录的季度过滤记录(实际上,我想根据谁没有为特定季度提交响应进行过滤,我想我以后可以用一个放置得当的波浪号来实现),所以我有以下几点:

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 个“Q1 2018”,和 2 个“-”),结果如下所示: p>

知道为什么我会得到 3 个“2018 年第一季度”和 1 个“-”吗?我只想要过滤器列表中的 1 个“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 过滤器正在显示四个对象的通用名称(2018 年第一季度)(以它们的 ID 区分)。

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

【问题讨论】:

  • 你试过不同的吗?
  • 我认为这不会改变它,但我会试一试。查看更新的问题 - 我在控制台中注意到过滤时生成的请求与响应 id 相关联(它们每个都是不同的)。
  • 通常我将 str 保留为我班级的特定标识....您可以为您的季度创建另一个 def Quarter(self),并对其进行过滤
  • @Walucas 我正要尝试 - 有道理。将其添加为答案,稍后我会检查结果。

标签: django list filter admin


【解决方案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')

【讨论】:

  • 我真的认为这会起作用,但不幸的是得到以下错误 - FieldError:无法将关键字“季度”解析为字段。选项有:answers、created、id、interview_uuid、survey、survey_id、updated、user、user_id。它正在访问响应模型(创建的字段、id、interview_uuid、调查、更新、用户)但不是季度定义? (我确实先尝试过大写)
  • 你删除了 def latest_response(self, obj): 吗?这个错误是由于这个我认为
  • 是的。这个答案有助于对其进行排序 - stackoverflow.com/a/48666112/4916945
猜你喜欢
  • 2012-03-30
  • 1970-01-01
  • 2019-02-07
  • 2017-03-05
  • 2018-07-17
  • 1970-01-01
  • 2011-01-22
  • 2018-09-28
  • 2021-07-28
相关资源
最近更新 更多