Abdul Rehman
Abdul Rehman

Reputation: 5654

Add filter by year in Django admin

I have a Django model with DateTimeField field as "created_at", now I want to add a filter for that field in Django admin but I need only the year field instead of default fields as (today, past 7 days, this month, this year).

Here's my model:

In 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)

I have tried to override created_at field in admin.py as:

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)

But it doesn't work. How can I achieve that? Help me, please! Thanks in advance!

Upvotes: 3

Views: 3918

Answers (2)

NIKHIL RANE
NIKHIL RANE

Reputation: 4092

Use django-daterange-filter package for filter on year.

And refer django-list-filter documentation.

May this helps you

Upvotes: 1

Albert Tsai
Albert Tsai

Reputation: 191

You can add date_hierarchy = 'created_at' to your admin class.

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

It also provides the ability to filter by month, day in a better way than implementing it by ourselves.

Upvotes: 5

Related Questions