我正在扩展现有的 Django 论坛应用程序 (DjangoBB),以允许用户选择加入/退出特定论坛和/或特定线程的通知。我的网站上已经有一个现有的通知基础设施,以及一个现有的全局设置来打开/关闭论坛通知。
我想要做的是允许每个用户订阅/取消订阅特定论坛或线程,有效地覆盖他们的全局设置。例如,如果我的全局设置为“通知关闭”,那么我将不会收到任何通知,除非我将特定论坛设置为“通知开启”,在这种情况下,我将收到该论坛中所有内容的通知,除非我设置该论坛中的主题为“关闭通知”。如果任何线程或主题没有设置集,则默认为链上。
我的问题是在 Django 的数据库中表示所有这些的最佳方式是什么?我有两个想法:
class ForumNotificationSetting(models.Model):
user = models.ForeignKey(User)
forum = models.ForeignKey(Forum)
setting = models.NullBooleanField(default=None)
我也会有一个类似的 TopicNotificationSetting 模型。这样,每当用户更改他们的论坛设置时,我都会创建(或修改)一个 NotificationSetting 对象以反映他们的新设置。这种方法看起来很简单,但缺点是如果很多人为很多论坛创建设置,那么每当发布新的论坛帖子时,为每个人创建通知将是 O(n^2)。(我认为...?)
我能想到的第二种方法是在每个用户的个人资料中为他们设置了设置的所有论坛创建一个 ManyToMany 字段。这种方式似乎更复杂(因为我必须有 4 个 M2M 字段,用于“论坛开启”、“论坛关闭”、“主题开启”和“主题关闭”),我不确定是否会有是否有任何性能优势。
你将如何解决这个问题?