既存のDjangoフォーラムアプリ(DjangoBB)を拡張して、ユーザーが特定のフォーラムや特定のスレッドの通知をオプトイン/オプトアウトできるようにします。サイトに既存の通知インフラストラクチャがあり、フォーラム通知をオン/オフにする既存のグローバル設定があります。
私がやりたいのは、各ユーザーが特定のフォーラムまたはスレッドからサブスクライブ/サブスクライブ解除できるようにして、グローバル設定を効果的にオーバーライドすることです。たとえば、グローバル設定が「通知オフ」の場合、特定のフォーラムを「通知オン」に設定しない限り、通知は届きません。この場合、設定しない限り、そのフォーラムのすべての通知が届きます。そのフォーラムの「通知オフ」へのスレッド。スレッドまたはトピックに設定が設定されていない場合、デフォルトでチェーンが上流になります。
私の質問は、Djangoのデータベースでこれらすべてを表すための最良の方法は何ですか?私には2つのアイデアがあります:
class ForumNotificationSetting(models.Model):
user = models.ForeignKey(User)
forum = models.ForeignKey(Forum)
setting = models.NullBooleanField(default=None)
TopicNotificationSettingにも同様のモデルがあります。このように、ユーザーがフォーラム設定を変更するたびに、新しい設定を反映するようにNotificationSettingオブジェクトを作成(または変更)します。この方法は簡単に思えますが、多くの人が多くのフォーラムの設定を作成する場合、新しいフォーラムの投稿が行われるたびに全員に通知を作成するとO(n ^ 2)になるという欠点があります。(おもう...?)
私が考えることができる2番目の方法は、設定を設定したすべてのフォーラムの各ユーザーのプロファイルに多対多フィールドを作成することです。この方法はもっと複雑に思えます(「フォーラムオン」、「フォーラムオフ」、「トピックオン」、「トピックオフ」の合計4つのM2Mフィールドが必要になるため)。パフォーマンス上のメリットがあるかどうか。
この問題をどのように解決しますか?