How do I get each distinct 'year' value out of a Django model with a datetime field?
django, python
Solution
The first `.date` accesses a datetime object.
The second `.date` is accessing a method on datetime objects that returns a date object but not calling it (this step is unneccessary).
The last part (the way you wrote it) is trying to access the `year` attribute of the date method, instead of accessing the `year` attribute of the result of the date method call.
Correcting the code to see the difference, it would look like this...
blog_years=[]
for entry in blog_entries:
if entry.date.date().year not in blog_years:
blog_years.append(entry.date.date().year)
But what you should do is more like this...
blog_years=[]
for entry in blog_entries:
if entry.date.year not in blog_years:
blog_years.append(entry.date.year)
since datetime objects have the date attribute as well.
Problem
I can successfully filter by a given year in my Django model, but I'm having trouble finding a way to list valid years so a user can access them. I have a django model with a defined 'datetime' field, oh-so-originally named 'date'. In my templates, I can successfully access the 'bar.date.date.year' field, so I know it exists, but when I try the following function... ``` blog_years=[] for entry in blog_entries: if entry.date.date.year not in blog_years: blog_years.append(entry.date.date.year) ``` I'm told that "'builtin_function_or_method' object has no attribute 'year'" I can only assume I"m tripping over some aspect of Python I'm not familiar with, but I can't figure out what it is. I'm quite certain it has to be syntactical, but past that...