Django:访问ForeignKey字段并基于它们创建新关系

时间:2018-08-14 17:48:43

标签: django django-models foreign-keys many-to-many

我是Django的新手,我正在尝试使用Django 2.0.5构建多聊天应用,而我的模型如下:

class DateTimeModel(models.Model):
    date_created = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Room(DateTimeModel):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4,
        editable=False
    )
    members = models.ManyToManyField(User)

    def __str__(self):
        ...

class Message(DateTimeModel):
    sender = models.ForeignKey(User, on_delete=models.CASCADE)
    room = models.ForeignKey(Room, on_delete=models.CASCADE)
    text = models.TextField()

    def __str__(self):
        ...

我想做什么:我想要设置数据库方案,以便每条消息都知道其收件人在其所属​​房间中的收件人,并以某种方式存储该房间中的每个成员是否具有“看过'消息。我在尝试查看如何使其工作方面遇到困难。

提前谢谢! 艾哈迈德

1 个答案:

答案 0 :(得分:0)

要获取邮件收件人,请使用(例如,如果我们在数据库中有一条id为= 1的邮件)

message = Message.objects.get(pk=1)
recipients = message.room.members

对于您所说的部分,您想查看谁看到了该消息。使用以下方法(这不是唯一的方法,而是一个示例):

在您的Message模型中添加另一个字段,即ManyToMany字段。 也许像seen = models.ManyToManyField(User)那样,这样当您捕获事件时,也许当用户单击消息时,向服务器发送发布/获取请求,将其看到的事件通知服务器,然后在其中使用以下代码:

message = Message.objects.get(id=POST_DATA['message_id'])
user = request.user
if user not in message.seen:
   message.seen.add(user)
'''
continue with app logic
'''

我希望你有个主意。