Django как отсортировать поле даты по порядку день-месяц, чтобы показать список дней рождения - PullRequest
0 голосов
/ 04 июля 2018

Я хочу принять день рождения пользователя и иметь страницу, которая показывает день рождения каждого человека, игнорируя, в каком году он родился. Вот мой models.py для CustomUser:

from datetime import datetime, date

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # First/last name is not a global-friendly pattern
    name = models.CharField(blank=True, max_length=255)
    birth_date = models.DateField(("Birth Date"), default=date.today)

    def __str__(self):
        return self.email

Вот моя логика views.py:

def birthdaylist(request):
    if(request.user.is_authenticated):

        users=CustomUser.objects.order_by('birth_date')[:]
    # ignore the line below
    #   users= CustomUser.objects.extra(select={'birthmonth':'birth_date'},order_by=['birthmonth'])
        context={
            'users':users
        }
        return render(request,'dashboard/birthdaylist.html',context=context)
    else:
        return redirect('login')

Вот мои формы.py:

import datetime

from bootstrap_datepicker_plus import DatePickerInput
from django import forms

from django.contrib.auth.forms import UserCreationForm, UserChangeForm


from .models import CustomUser


class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        now = datetime.datetime.now()
        fields = ('username', 'email', 'gender', 'security_question', 'answer', 'birth_date', 'resume')
        widgets={
            'birth_date' :DatePickerInput(
                options={
                    'maxDate':str(datetime.datetime.now()),
                    #this needs width positioning
                }
            )
        }

Я использую загрузчик datepicker плюс виджет, чтобы выбрать дату. Может ли кто-нибудь помочь мне с тем, как мне получить желаемый результат в моих представлениях .py? Я чувствую, что что-то нужно добавить в мой order.py, если вам нужно, чтобы я что-то добавил, тогда комментируйте. PS: я использую Django 2.0.6 версия

1 Ответ

0 голосов
/ 04 июля 2018

Попробуйте

users=CustomUser.objects.extra(
      select={
      'month': 'extract (month from birth_date)', 
      'day': 'extract (day from birth_date)'},
       order_by=['month','day']
)

Как насчет этого?

from django.db.models.functions import Extract

users=CustomUser.objects.annotate(
     month=Extract('birth_date','month'),
     day=Extract('birth_date','day')
  ).order_by('month','day')
...