Я занимаюсь разработкой системы микроблогов, подобной твиттеру, используя следующие модели:
class Member(db.Model):
user = db.UserProperty(required=True)
follower_count = db.IntegerProperty(default=0) # members following you
following_count = db.IntegerProperty(default=0) # members you are following
class NewsItem(db.Model):
text = db.StringProperty(required=True)
posted_by = db.ReferenceProperty(reference_class=Member,required=True,collection_name="posted_items")
posted_on = db.DateTimeProperty(auto_now_add=True)
status = db.IntegerProperty(default=1) # 0: deleted
class Follow(db.Model):
member = db.ReferenceProperty(reference_class=Member,required=True,collection_name="followings")
followed_member = db.ReferenceProperty(reference_class=Member,required=True,collection_name="followers")
added_on = db.DateTimeProperty(auto_now_add=True)
В этой структуре модели я получаю сообщения членов, которым следует текущий пользователь, с помощью следующего кода:
follow_log_list = Follow.gql('WHERE member = :1 ', member)
followed_member_list = []
for follow_log in follow_log_list:
followed_member_list.append(follow_log.followed_member)
query = NewsItem.all()
query.filter('posted_by IN', followed_member_list)
query.filter('status =', 1)
query.order('-posted_on')
query.with_cursor(cursor)
newsList = query.fetch(10)
template_values['cursor'] = query.cursor()
Когда вызывается метод query.cursor (), я получаю следующую ошибку:
"Нет курсора для MultiQuery
(запросы с использованием "IN" или "! ="
операторы) "
Это нормально, поскольку в документации по курсорам это ограничение четко указано как:
http://code.google.com/appengine/docs/python/datastore/queries.html
"Вы не можете использовать курсоры с запросами, которые используют операторы IN или! = Filter."
Каков альтернативный способ получения постов следующих участников?
Спасибо,
РЕДАКТИРОВАТЬ: отправленные сообщения были отфильтрованы по их статусу и упорядочены по дате их публикации ... Но образец не показал здесь, я изменил это ...