Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2010 19:23:21

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

Выборка по inequality полям

Есть примитивная модель

class MyModel(Model):
rating = IntegerProperty()
timestamp = IntegerProperty()
необходимо сделать такую выборку

MyModel.all().filter('timestamp <', 100).order('-rating')
понятно что вылетает ошибка типа First ordering property must be the same as inequality filter property, if specified for this query; received rating, expected timestamp

Может кто знает как все таки получить нужный результат? Может есть какой-нибудь трюк…



Офлайн

#2 Март 30, 2011 20:30:28

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

Выборка по inequality полям

Может кому нибудь пригодится.
Так как у меня была очеь протая задаса просто сортировать записи по популярности и рейтингу сделал так:

class TopPager(Pager):
'''Paginator for TOP of content
'''

def __init__(self, query, days, **kw):
super(TopPager, self).__init__(query, **kw)
self.days = days

@property
def results(self):
is_dirty = True
while is_dirty:
is_dirty = False
page = super(TopPager, self).results
for item in page:
if not (datetime.utcnow() - item.date).days < self.days:
item.put()
is_dirty = True
return page
Соответственно в модели:
    @db.ComputedProperty
def top_24h(self):
return _since_days(self.date, 1)

@db.ComputedProperty
def top_7d(self):
return _since_days(self.date, 7)

@db.ComputedProperty
def top_30d(self):
return _since_days(self.date, 30)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version