Reputation: 5654
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
Reputation: 4092
Use django-daterange-filter package for filter on year.
And refer django-list-filter documentation.
May this helps you
Upvotes: 1
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