How to get as result a list of all the users ordered by birthday (month day), ignoring year

25 views
Skip to first unread message

Roberta Takenaka Granero

unread,
Nov 17, 2017, 7:19:43 AM11/17/17
to django...@googlegroups.com
In models:

birthday = models.DateField()

def birthday_month_day(self):
      # returns month and day
      return '12-31' 


In views, I expect to see something pythonic like this:

User.objects.all().order_by('birthday_month_day')

I know it does not work because birthday_month_day is not a column in database.

The question is how to get as result a list of all the users ordered by birthday (month + day), ignoring year. (queryset order_by DateField month day)

Can you help me? Anyone has faced this question before?

Thanks



--
Roberta Takenaka

Roy Shillingburg

unread,
Nov 17, 2017, 8:24:25 AM11/17/17
to Django users

Roberta Takenaka Granero

unread,
Nov 21, 2017, 10:53:56 AM11/21/17
to django...@googlegroups.com
Dear Roy

I had already seen that link. But I didn't like the solution. Anyway it works, so I am using it for while.

Thank you

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/97d66095-d7a5-42c9-ad99-673fac39dac5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Roberta Takenaka

Dan Tagg

unread,
Nov 21, 2017, 1:59:21 PM11/21/17
to django...@googlegroups.com
Hi Roberta,

I haven't tested it but assuming you want the ordering to happen within the database you may be able to do it with a combination of TIMESTAMPDIFF and MOD.

Something like MOD( TIMESTAMPDIFF( 'SECOND', birthday, '1900-01-01'), 31556951) assuming you're using MySQL.

On average there are 365.2425 days per year, which equates to 31,556,951 seconds. 

Dan


For more options, visit https://groups.google.com/d/optout.



--
Wildman and Herring Limited, Registered Office: 28 Brock Street, Bath, United Kingdom, BA1 2LN, Company no: 05766374

Matthew Pava

unread,
Nov 21, 2017, 3:03:23 PM11/21/17
to django...@googlegroups.com

https://docs.djangoproject.com/en/1.11/ref/models/database-functions/#extract

 

MyModel.objects.order_by('birthday__month', 'birthday__day')

--

To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.




--

Roberta Takenaka

--
You received this message because you are subscribed to the Google Groups "Django users" group.

To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.


To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.



 

--

Wildman and Herring Limited, Registered Office: 28 Brock Street, Bath, United Kingdom, BA1 2LN, Company no: 05766374

--

You received this message because you are subscribed to the Google Groups "Django users" group.

To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.


To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

Reply all
Reply to author
Forward
0 new messages