【问题标题】:Add filter by year in Django admin在 Django admin 中按年份添加过滤器
【发布时间】:2018-03-23 22:06:42
【问题描述】:

我有一个 Django 模型,其 DateTimeField 字段为“created_at”,现在我想在 Django 管理中为该字段添加一个过滤器,但我只需要年份字段而不是默认字段(今天,过去 7 天,本月,今年)。

这是我的模型:

在models.py中

class TaggedArticle(models.Model):
user = models.ForeignKey(User, related_name='tagging')
email = models.EmailField(max_length=255)
category_fit = models.CharField(choices=choices, max_length=255)
article = models.ForeignKey(Article, related_name='articles')
link = models.URLField(max_length=255,)
relevant_feedback = models.TextField(blank=True)
category = models.CharField(max_length=255,)
created_at = models.DateTimeField(default=timezone.now, editable=False)

我尝试将 admin.py 中的 created_at 字段覆盖为:

class TaggedArticle(admin.ModelAdmin):
    fields = ['category_fit', 'article', 'link', 'relevant_feedback', 'category', 'user', 'email', 'created_at']
    list_display = ['article_id', 'link', 'user', 'created_at']
    list_filter = ['user', 'email', 'created_at']
    model = Tagged


def created_at(self, obj):
    return self.Tagged.created_at.year

admin.site.register(Tagged, TaggedArticle)

但它不起作用。 我怎样才能做到这一点? 请帮帮我! 提前致谢!

【问题讨论】:

    标签: python django django-admin django-admin-filters


    【解决方案1】:

    您可以将date_hierarchy = 'created_at' 添加到您的管理员类。

    class TaggedArticle(admin.ModelAdmin):
        date_hierarchy = 'created_at'
        fields = ['category_fit', 'article', 'link', 'relevant_feedback', 'category', 'user', 'email', 'created_at']
        list_display = ['article_id', 'link', 'user', 'created_at']
        list_filter = ['user', 'email']
        model = Tagged
    

    它还提供了按月、按天过滤的功能,比我们自己实现的方式更好。

    【讨论】:

    • 嗨@蔡!它不起作用,仍然显示所有过滤器选项,我只需要显示年份,它应该显示创建任何标记文章的所有年份。
    • 您可以从list_filter中删除created_at,过滤器将显示在所有列的顶部。
    • 它也显示月份,我如何只显示年份?
    • 我不认为有一个简单的方法可以做到这一点,但由于第一个视图中只显示年份,它在某些情况下很有用,如果你需要更高级的可能会被覆盖用法。
    【解决方案2】:

    使用django-daterange-filter包过滤年份。

    并参考django-list-filter 文档。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 2012-06-29
      • 2014-01-30
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2010-09-15
      • 2014-12-31
      相关资源
      最近更新 更多