Я пытаюсь создать систему обмена сообщениями, похожую на gmail, в Google App Engine, используя Django-nonrel. Я посмотрел «Создание масштабируемых, сложных приложений на App Engine» и прочитал следующие вопросы о SO.
Система обмена сообщениями App Engine со статусом сообщения - шаблон проектирования
дизайн базы данных в google app engine
Мне нравится идея, на которую указал Кевин ( Система обмена сообщениями App Engine со статусом сообщения - Шаблон проектирования ), поэтому мои текущие модели выглядят так:
class Message(models.Model):
sender = models.ForeignKey(User)
content = models.TextField()
thread_id = models.IntegerField()
class MessageReceivers(models.Model):
message = models.ForeignKey(Message)
users = ListField(models.CharField())
status = models.IntegerField() # 1 unread, 2 read ....
ListField для Django-nonrel отсюда:
http://www.allbuttonspressed.com/blog/django/2010/03/Updates-on-djangoappengine
А вот моя проблема, я не знаю, как добиться, чтобы отображать количество сообщений в каждой теме, например, в gmail. Позвольте мне прояснить мою точку зрения.
Когда пользователь, Сириус, отправляет сообщение Гарри и Рону. Модели (упрощенные для пояснения) должны быть такими:
Message
id = 1
sender = Sirius
thread_id = 1
MessageReceivers
message = 1
users = [Harry, Ron]
Затем Гарри отвечает Сириусу, но по какой-то причине он не включает Рона:
Message
id = 2
sender = Harry
thread_id = 1
MessageReceivers
message = 2
users = [Sirius]
И Сириус тоже отвечает Гарри, но он снова включает Рона:
Message
id = 3
sender = Sirius
thread_id = 1
MessageReceivers
message = 3
users = [Haary, Ron]
И когда Сириус и Гарри видят свои входящие сообщения, появляется цепочка сообщений (3). И Рон видит свой почтовый ящик, там есть поток с количеством сообщений (2). Как мне посчитать эти цифры? Должен ли я сделать новую модель, чтобы сохранить их?
Заранее спасибо,
Yoo
EDIT
Когда Кевин познакомил меня с моделью потоков, я понял, что мне не нужна модель индекса отношений для моих требований, поэтому мои текущие модели выглядят следующим образом.
class Message(models.Model):
sender = models.ForeignKey(User)
content = models.TextField()
class Thread(models.Model):
user = models.ForeignKey(User)
messages = ListField(models.CharField()) # array of message id
lastmodified = models.DateTimeField()
# could have a status field for read or unread, not sure for now
Я мог бы столкнуться с трудностями в этих моделях в дальнейшем развитии, но я бы пошел с ними на время:)