我有一个Blog模型和一个Entry模型,按照django文档中的示例进行操作。
Entry有一个对Blog的ForeignKey:一个Blog有多个Entries。
我有两个FieldListFilters用于Blog:一个是“Entry标题”,一个是“Entry发布年份”。
如果在Blog列表管理页面中同时过滤
例如,假设我有以下数据:
根据文档,为了获得所需的结果,只需要进行一次过滤调用:
我该如何在管理界面使用筛选器实现此行为?
背景:
两个筛选器在涉及多对多关系的筛选方面是不同的。请参见上面的文档链接。
Entry有一个对Blog的ForeignKey:一个Blog有多个Entries。
我有两个FieldListFilters用于Blog:一个是“Entry标题”,一个是“Entry发布年份”。
如果在Blog列表管理页面中同时过滤
entry__title='Lennon'
和entry__published_year=2008
,那么我会看到所有至少有一个标题为“Lennon”的条目和至少一篇来自2008年的条目的博客。 它们不必是同一篇文章。
然而,这不是我想要的。我想要的是筛选出既有标题为“Lennon”又来自2008年的条目的博客。例如,假设我有以下数据:
博客 | 文章标题 | 发布年份 |
---|---|---|
A | 麦卡特尼 | 2008 |
A | 列侬 | 2009 |
B | 列侬 | 2008 |
博客的管理列表页面目前过滤了博客A,因为它有一个来自2008年和一个“Lennon”的条目,以及博客B。我只想看到博客B。
这是因为Django在构建查询集时会这样做:
qs = qs.filter(title_filter)
qs = qs.filter(published_filter)
根据文档,为了获得所需的结果,只需要进行一次过滤调用:
qs = qs.filter(title_filter & published_filter)
我该如何在管理界面使用筛选器实现此行为?
背景:
两个筛选器在涉及多对多关系的筛选方面是不同的。请参见上面的文档链接。
MyModel.filter(a=b).filter(c=d)
MyModel.filter(a=b, c=d)