Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 1, 2011 21:19:56

walter
От:
Зарегистрирован: 2008-11-22
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтр по части даты

Моя модель

class BaseArticleModel(polymodel.PolyModel):
title = db.StringProperty()
created_at = db.DateProperty(auto_now_add=True)
updated_at = db.DateProperty(auto_now=True)

class News(BaseArticleModel):
body = db.TextProperty()

Мне нужны данные за последний месяц. При попытке сделать:

q = News.all().filter('created_at.month = ', datetime(2011,04,01).month)

print q.title

Я получаю сообщение “IndexError: The query returned fewer than 1
results”



Офлайн

#2 Апрель 2, 2011 16:18:17

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Фильтр по части даты

Чем не устраивает

q = News.all().filter('created_at >=', datetime.utcnow()-timedelta(30))
К тому же .month - это не последний месяц, а просто месяц даты.

Либо к рецепту http://appengine-cookbook.appspot.com/recipe/fetch-a-months-worth-from-the-datastore



Офлайн

#3 Апрель 2, 2011 21:16:48

walter
От:
Зарегистрирован: 2008-11-22
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтр по части даты

zheromo
Чем не устраивает
q = News.all().filter('created_at >=', datetime.utcnow()-timedelta(30))
К тому же .month - это не последний месяц, а просто месяц даты.

Либо к рецепту http://appengine-cookbook.appspot.com/recipe/fetch-a-months-worth-from-the-datastore
Я не все указал в вопросе. Под последним месяцем имеется в виду значение последнего месяца в хранилище. Т.е. если в текущем месяце были какие-то сообщения, то фильтровать по этому месяцу и году, а если нет, то найти в хранилище последний пост и по его дате, а точнее месяцу и году установить фильтр.

Пошел смотреть datetime.utcnow()-timedelta(30). :)

P.S. Где можно прочитать про @db.ComputedProperty?



Отредактировано (Апрель 2, 2011 21:19:01)

Офлайн

#4 Апрель 3, 2011 00:01:48

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Фильтр по части даты

Если известен диапазон дат, то как-то так:

q = News.all().filter('created_at >=', datestart).filter('created_at <', dateend)
walter
Где можно прочитать про @db.ComputedProperty?
Если кратко, если мы в модели напишем например:
class News(db.Model):
created_at = db.DateTimeProperty()
@db.ComputedProperty
def month(self):
return self.created_at.month
то в модели появится поле month - чему оно равно - ясно из кода



Офлайн

#5 Апрель 3, 2011 00:09:58

walter
От:
Зарегистрирован: 2008-11-22
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтр по части даты

zheromo
Если кратко, если мы в модели напишем например:
class News(db.Model):
created_at = db.DateTimeProperty()
@db.ComputedProperty
def month(self):
return self.created_at.month
то в модели появится поле month - чему оно равно - ясно из кода
Я так и реализовал, только не пойму в чем разница между @property и @db.ComputedProperty?



Офлайн

#6 Апрель 3, 2011 10:34:33

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Фильтр по части даты

walter
только не пойму в чем разница между @property  и  @db.ComputedProperty?
property создается непосредственно ПОСЛЕ извлечения объекта модели из базы, ComputedProperty хранится НЕПОСРЕДСТВЕННО в самой базе и, соответственно, может использоваться в фильтрах, сортировках и т.д.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version