Django:用于存储来自/来自用户的消息/通知的简单模型

ele*_*han 5 python django django-models

我正在尝试为我的 Django 应用程序创建一个简单的通知/消息模型。这将存储从站点到用户的通知,以及从一个用户到另一个用户的消息。我一直在使用的工作模型如下所示:

class Notification(models.Model):
    sender = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='sender_notification')
    recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name='recipient_notification')
    message = models.TextField()
    read = models.BooleanField(default=False)
    recieved_date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

一条消息将有 0-1 个发件人(如果消息是从站点发送给用户的通知,则为 0),通常有一个收件人(当通知是针对某个特定用户时——例如,“对您的帖子有评论” - 或者当一条消息从一个用户发送给另一个用户时)。这对我有用。但是,我突然想到在某些情况下我想向每个用户发送通知。我可能会Notification在循环中创建对象:

for user in User.objects.all():
    Notification.objects.create(recipient=user, message='message for all uses')
Run Code Online (Sandbox Code Playgroud)

但这似乎效率很低,并且会在数据库中造成不必要的混乱。

我尝试像这样更新我的模型:

class Notification(models.Model):
    sender = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='sender_notification')
    recipient = models.ManyToManyField(User)
    message = models.TextField()
    read = models.BooleanField(default=False)
    recieved_date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

但这需要一个sender(出于我不明白的原因),并且由于每个通知只有一个记录,当一个收件人阅读通知并我设置时read = True,它将显示为所有收件人的已读。

是否有一个简单的解决方案,我可以使用单个模型来处理通知/消息,或者我将不得不添加一些额外的模型(或通知表中的重复通知)?

原谅我对数据库设计的无知。这绝对是我正在努力解决的弱点。

Adm*_*ian 2

我的解决方案是创建一个 ReadFlag 模型。

class ReadFlag(models.Model):
   user = models.ForeignKey(User)
   message = models.ForeignKey(Message)
   created = ...
Run Code Online (Sandbox Code Playgroud)