【问题标题】:How to have a change list in django that filters by a field having a relation?如何在 django 中有一个按具有关系的字段过滤的更改列表?
【发布时间】:2011-10-20 22:28:23
【问题描述】:

假设我有两个模型:

class Blog(models.Model):
    pass

class Article(models.Model):
    blog = models.ForeignKey(Blog, related_name="articles")

我只想过滤包含文章的博客。过滤器是这样的:

Blog.objects.annotate(article_count=models.Count('articles')).filter(article_count__gt=0)

我怎样才能在这样的管理员过滤器中获得更改列表? 我尝试了一些方法,例如自定义过滤器规格,但没有成功。 最好的解决方案是使用代理模型并注册一个单独的管理员列表,就像这个解决方案:

Multiple ModelAdmins/views for same model in Django admin

但这在权限系统中效果不佳。 有什么想法吗?

【问题讨论】:

  • 顺便说一句,这不是最有效的查询:)

标签: python django filter admin


【解决方案1】:

除了一些非常痛苦的黑客攻击之外,目前没有其他方法可以实现这一目标。 Django 1.4 将附带创建自定义过滤器规范的能力(请参阅:https://code.djangoproject.com/ticket/5833),这将允许您执行此类操作。

因为这似乎是一种边缘情况(真的,有多少博客会在很长一段时间内发布零帖子?)我的建议是暂时坚持下去,也许考虑升级一次 1.4被释放了。

如果你坚持要走兔子洞,可以从这里开始:Custom Filter in Django Admin on Django 1.3 or below

【讨论】:

  • 谢谢。我的案例实际上与博客无关,我以这个模型为例,只是为了简单起见。我的模型是关于电影节上的电影。只有一些(大约 20%)将被展出。那些在相关的电影节目中。所以我希望只过滤为电影节编排的电影。还是要谢谢你的帮助。我可能会等待 django 1.4。
猜你喜欢
  • 1970-01-01
  • 2015-10-10
  • 2021-12-23
  • 2015-08-28
  • 2023-03-06
  • 2019-07-06
  • 2019-01-29
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多