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,它将显示为所有收件人的已读。
是否有一个简单的解决方案,我可以使用单个模型来处理通知/消息,或者我将不得不添加一些额外的模型(或通知表中的重复通知)?
原谅我对数据库设计的无知。这绝对是我正在努力解决的弱点。
我的解决方案是创建一个 ReadFlag 模型。
class ReadFlag(models.Model):
user = models.ForeignKey(User)
message = models.ForeignKey(Message)
created = ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |