запрашивая в Джанго - PullRequest
       5

запрашивая в Джанго

0 голосов
/ 07 апреля 2011

Я сохранил данные в таблице относительно дат, то есть может быть более одной записи за один месяц, но когда я их получаю, мне нужно получить их как объединенный результат.Так или иначе, я мог бы запросить его, чтобы получить данные за месяц, для которого установлен диапазон как месяц в django (просмотр).

edit:

Измененияиз моего предыдущего поста.Мне нужно сделать это в течение года, и у меня нет конкретной даты начала и окончания.Мне нужно установить диапазон для месяцев в году, независимо от количества присутствующих дней.моя база данных будет выглядеть так:

date        count1     count2  
2011/12/01,   12,          3 
2011/12/03,   3,           6

Теперь мне нужно получить count1 за месяц декабрь.Мне нужен общий запрос не только для определенного месяца, скажем, 30 или 31 или 28 дней.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

docs

Если у вас есть DateField

class MyModel(models.Model):
    my_date = models.DateField()

запрос:

import datetime
startdate = datetime.date(...start of some month...)
enddate = datetime.date(...end of some month...)
my_model_in_range = MyModel.objects.filter(my_date__range(startdate,enddate))

редактирование:

count docs

import datetime

def first_day_of_month(month, year):
    return datetime.date(year, month, 1)

def last_day_of_month(month, year):
    return datetime.date(year, month+1, d.day) - datetime.timedelta(1)

# if you want query for jan 2009: month = 1, year = 2009

first = first_day_of_month(1, 2009)
last = last_day_of_month(1, 2009)

objects_in_jan_2009 = MyModel.objects.filter(my_date__range(first, last))

count = objects_in_jan_2009.count()
1 голос
/ 07 апреля 2011

После того, как вы получите диапазон, запросите модель со следующим:

YouModel.objects.filter(date__gt='initial date').filter(date__lt='final date')

дата должна быть полем в вашей модели. __gt и __lt применяют фильтр для поля для поиска значений, больших и меньших, чем переданный параметр.

0 голосов
/ 07 апреля 2011

Лучший способ сделать это - через raw sql

YourModel.objects.extra(
        select={'values':'select sum(count) as count , extract(month from mymodel_db.date) as date group by date'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...