私は電子メール/ SMS通知エンジンを構築しています。人またはグループはオブジェクトに登録することができ、オブジェクトが更新されると、その人/グループに電子メール/ SMSによって変更が通知されます。Django:通知エンジンを作成する
現在、私は以下のようにそれを実装しました:
models.py
class Subscription(models.Model):
# subscribers
people = models.ManyToManyField(Person)
groups = models.ManyToManyField(Group)
# mandatory fields for generic relation
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
mixins.py
class NotificationMixin(object):
def perform_update(self, serializer):
model_name = str.lower(serializer.Meta.model)
old_obj = model.objects.get(id=serializer.data['id'])
obj = serializer.save()
self.notify(model_name, old_obj, obj)
def notify(self, model_name, old_obj, obj):
# All models have a GenericRelation field for reverse searching
subscriptions = Subscription.objects.filter(**{ model_name: obj })
// *rest of logic to iterate over subscriptions and email people/groups
DjangoのContentTypeを一般的な関係を使用して、私は人を購読することができます/グループを任意のオブジェクトに追加します。
同じサブスクリプションモデルを使用してグローバルサブスクリプションを作成する機能を追加して、すべてが同じテーブルに格納されるようにしたいとします。グローバルサブスクリプションには追跡対象のオブジェクトはありませんが、特定のモデルのオブジェクトがトリガーされると、電子メールが送信されます。
サブスクリプションモデルを一般化してモデルインスタンスを受け入れるか、レスポンスをトリガーするモデルが問題になります。
機能は、私がしたい:
グローバルサブスクリプションモデルXの任意のオブジェクトが
オブジェクト・レベルのサブスクリプション
を変更された場合によって更新- 人々/グループ
- 特定のオブジェクトが
- 人々/グループ
を更新している場合、更新者/グループが、私はこの問題について移動する良い方法を持っている現在のモデル/アーキテクチャですか、私は異なり、これをアプローチする必要がありますか?
ノートフロントエンドはAngularJsであるため、これは私たちのdjango apiとの排他的な相互作用です。これに対する解決策を見つけたいことがあり誰のために