2017-02-23 33 views
-1

У меня есть класс, который DateTimeFieldДжанго: Получить дату мудрого подсчет в DateTimeField

class Foo(models.Model): 
    id = models.AutoField(primary_key=True, db_column='status_id') 
    date_field = models.DateTimeField(default=django.utils.timezone.now) 
    f1 = models.TextField(blank=True, null=True) 
    f2 = models.SmallIntegerField() 

Я хочу, чтобы применить фильтр по дате в DateTimeField и получить выход в следующем формат после выполнения какого-то запроса:

f2 f1 date_field
54 2017-02-01 4
53 2017-02-01 6
52 2017-02-01 2
51 2017-02-01 1
48 2017-02-01 5
47 2017-02-01 2
46 2017-02-01 3
45 2017-02-01 2
41 2017-02-01 1
38 2017- 02-01 3
32 2017-02-01 17
30 2017-02-01 3
29 2017-02-01 4
18 2017-02-01 4
14 2017-02-01 5
13 2017-02-01 2

ответ

0

Это может работать для вас: -

from django.db.models import Count 
Foo.objects.values('f2','date_field','f1').annotate(dcount=Count('date_field') 
+0

мое поле даты - это поле datetimefield, и я хочу, чтобы фильтры были основаны на дате, а не дате. –

0

Я нахожу ваш вопрос совершенно неясен. Однако из вашего примера я вижу, что список упорядочен на вашем поле f2. Для фильтрации на вашем order_by('field'). Чтобы отфильтровать поле, вы можете использовать .filter() на своем queryset. Для фильтрации, например, сегодня, мы можем передать datetime.now() из библиотеки datetime. Чтобы отформатировать дату, вы можете использовать date/dateTime-object.strftime('<format>'). Но, пожалуйста, уточните свой вопрос, ваш реальный вопрос для нас довольно важен.

from datetime import datetime 

today = datetime.now() 
foos = Foo.objects.filter(date_field=today) \ 
     .order_by('-f2') \ 
     .annotate(date_count=Count('date_field')) 

for foo in foos: 
    date_formatted = foo.date_field.strftime("%Y-%m-%d") 
    print foo.f2, date_formatted, foo.date_count 
Смежные вопросы