Найти - Пользователи
Полная версия: Фильтр по части даты
Начало » Google App Engine » Фильтр по части даты
1
walter
Моя модель

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”
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
walter
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?
zheromo
Если известен диапазон дат, то как-то так:
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 - чему оно равно - ясно из кода
walter
zheromo
Если кратко, если мы в модели напишем например:
class News(db.Model):
created_at = db.DateTimeProperty()
@db.ComputedProperty
def month(self):
return self.created_at.month
то в модели появится поле month - чему оно равно - ясно из кода
Я так и реализовал, только не пойму в чем разница между @property и @db.ComputedProperty?
zheromo
walter
только не пойму в чем разница между @property  и  @db.ComputedProperty?
property создается непосредственно ПОСЛЕ извлечения объекта модели из базы, ComputedProperty хранится НЕПОСРЕДСТВЕННО в самой базе и, соответственно, может использоваться в фильтрах, сортировках и т.д.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB