django сортирует элементы запроса еженедельно ежемесячно ежедневно

Я получаю список людей и тесты, которые они взяли из api в том же проекте. Я хотел бы, чтобы у пользователя была возможность увидеть количество тестов, которые имели место в городе, с тремя вариантами – ежедневно / еженедельно / ежемесячно.

models.py

 class City(models.Model): city_name=models.CharField(max_length=100,default='',blank=False) class Person(models.Model): title = models.CharField(max_length=3,default="mr",blank=False) name = models.CharField(max_length=50,default='',blank=False) address = models.CharField(max_length=200,default='',blank=False) city = models.ForeignKey(City) class Test(models.Model): person = models.ForeignKey(Person) date = models.DateTimeField(auto_now_add=True) test_name = models.CharField(max_length=200,default='',blank=False) subject = models.CharField(max_length=100,default='') по class City(models.Model): city_name=models.CharField(max_length=100,default='',blank=False) class Person(models.Model): title = models.CharField(max_length=3,default="mr",blank=False) name = models.CharField(max_length=50,default='',blank=False) address = models.CharField(max_length=200,default='',blank=False) city = models.ForeignKey(City) class Test(models.Model): person = models.ForeignKey(Person) date = models.DateTimeField(auto_now_add=True) test_name = models.CharField(max_length=200,default='',blank=False) subject = models.CharField(max_length=100,default='') 

Файл json для людей в каждом городе создается таким образом: http://pastebin.com/pYLBjrjh

related views.py

 def personlist(request, id): data = requests.get('http://127.0.0.1:8000/app/cities/' + id + '/persons/').json() context = RequestContext(request, { 'persons': data['results'],'count': data['count'], }) return render_to_response('template.html', context) 

Это генерирует список имен в этом городе, которые прошли тест. Я хочу знать, есть ли способ разрешить пользователю выбирать период времени (ежедневно / еженедельно / ежемесячно) и просматривать только те имена, которые прошли тест за этот период времени.

  • Django Query выполняет различные значения, но я не могу использовать результат запроса
  • Коды языков интернационализации Django
  • Как я могу получить имя пользователя вошедшего в систему пользователя в Django?
  • Получение объекта 'str' не имеет атрибута 'get' в Django
  • Могу ли я иметь форму Django без модели
  • Django: объект 'module' не имеет атрибута 'index'
  • Что эквивалентно «none» в шаблонах django?
  • Запрос многих из многих полей в шаблоне django
  • 2 Solutions collect form web for “django сортирует элементы запроса еженедельно ежемесячно ежедневно”

    Чтобы получить доступ к тесту через Person Model, вы можете определить свое собственное родственное имя, например, tests или просто использовать по умолчанию django test_set :

     class Test(models.Model): person = models.ForeignKey(Person, related_name='tests') date = models.DateTimeField(auto_now_add=True) test_name = models.CharField(max_length=200,default='',blank=False) subject = models.CharField(max_length=100,default='') 

    related_name определяет обратное отношение, поэтому вы можете выполнить следующий запрос:

      person_1.tests.all() person_1.tests.filter(date=date) person_1.tests.filter(date__day=day) # day is an integer person_1.tests.filter(date__month=month) # month is an integer 

    но на неделю нет поддержки по умолчанию, но вы все еще можете сделать это, используя функцию диапазона :

     import datetime start_date = datetime.date(2015, 12, 16) end_date = start_date + datetime.timedelta(days=7) person_1.tests.filter(date__range=(start_date, end_date)) 

    Пример :

    в views.py:

     def get_current_month(): now = datetime.now() return now.strftime("%m") def get_current_year(): now = datetime.now() return now.strftime("%y") def tests_by_month(request, id): person = Person.objects.get(id=id) month = request.GET.get('month', get_current_month()) # if no month take the current as default year = request.GET.get('month', get_current_year()) # if no year take the current as default test_list = person.tests.filter(date__month=int(month), date__year=int(year)) context = {'test_list': test_list} return render_to_response(request, 'template.html', context) 

    в urls.py:

     url(r'^app/persons/(?P<id>\d+)/tests/', tests_by_month), 

    и вы используете следующий URL-адрес

     app/persons/(?P<id>\d+)/tests/?month=12&year=2014 

    если вы отправляете без месяца: app/persons/(?P<id>\d+)/tests/ вы получите тесты текущего месяца и текущего года

    Это дополнение к ответу выше, поскольку он не поддерживает годы, что означает, что данные тестов не будут точными, если данные накапливаются на протяжении многих лет. Например, если есть данные за 2014 год и 2015 год, то получение данных по месяцам будет возвращать данные за январь и 2015 год.

    Решение

    Поставьте год также в запрос и фильтр, используя год в модели также

     def tests_by_month(request, id): person = Person.objects.get(id=id) month = request.GET.get('month', get_current_month()) year = request.GET.get('year', datetime.now().year) test_list = person.tests.filter(date__month=int(month), date__year=year) context = {'test_list': test_list} return render_to_response(request, 'template.html', context) 
    Python - лучший язык программирования в мире.