В моем приложении пользователи могут подписываться на других пользователей, и получать обновления всякий раз, когда люди, за которыми они следят, выполняют действия.
Я сохраняю следующие отношения следующим образом:
class User(db.Model):
''' User details '''
username = db.StringProperty()
class Contacts(db.Model):
'''Store users contacts
parent= User (follower)
key_name= Users username (follower)
contacts = A list of keys of Users that a User follows '''
contacts = db.ListProperty(db.Key)
last_updated = db.DateTimeProperty(auto_now=True)
Получение подписчиков и пользователей, за которыми следует пользователь (подписчики и подписки):
'''Get Users that my_user follows'''
my_user = User().all().fetch(1)
contacts = Contacts.get_by_key_name(my_user.username).contacts
''' get my_user followers - copied from an answer here on stackoverflow '''
follower_index = models.Contacts.all(keys_only=True).filter('contacts =',my_user)
follower_keys = [f.parent() for f in follower_index]
followers = db.get(follower_keys)
Итак, я хочу упорядочивайте подписчиков my_user по дате подписки (которую я не отслеживаю в приведенных выше моделях), но я не уверен, как лучше всего это сделать. Вот варианты, которые я могу придумать:
1) Вместо текущей структуры для контактов (db.Model) используйте модель «моста»:
class Contacts(db.Model):
follower = db.ReferenceProperty(User)
following = db.ReferenceProperty(User)
date_created = db.DateTimeProperty(auto_now_add=True)
Однако мне все еще нужно выяснить, как убедиться, что У меня есть уникальный последователь-> следующие объекты: follower = user1, following = user2 не должен повторяться. Я могу это сделать, если, думаю, применю к моему запросу 2 фильтра.
2) Сохраните текущую структуру модели, но вместо списка ключей в Контактах (db.Model) сохраните кортеж: [user_key, - Мне нужно извлечь ключи пользователя и date_created из каждой строки в StringList () - Затем я могу упорядочить список пользовательских ключей по дате создания
3) Последнее решение (явно неэффективное): сохранить исходную структуру базы данных и сохранить действия пользователя в отдельной Модели - каждое последующее действие сохраняется отдельно с поле date_created. Используйте эту таблицу только для того, чтобы иметь возможность упорядочить список подписчиков пользователей по дате. Это, конечно, означает, что я сделаю две операции помещения в хранилище данных - одну в Contacts (), а другую в FollowNewsFeed () следующим образом:
Class FollowNewsFeed(db.Model):
''' parent = a User follower'''
following = db.ReferenceProperty(User)
date_created = db.DateTimeProperty(auto_add_now=True)
Любые идеи о том, как лучше всего справиться с этим, приветствуются:)
Спасибо !