【问题标题】:Django: Accessing ForeignKey fields and creating new relations based on themDjango:访问 ForeignKey 字段并基于它们创建新关系
【发布时间】:2019-01-21 15:34:33
【问题描述】:

我对 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):
        ...

我想做的事:我想设置数据库方案,以便每条消息都知道它所属房间中的收件人是谁,并以某种方式存储该房间中的每个成员是否有 '看到'消息。我很难尝试看看如何让它发挥作用。

提前致谢! 艾哈迈德

【问题讨论】:

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


    【解决方案1】:

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

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

    对于您所说的部分,您希望查看谁看到了该消息。使用下面的方法(不是唯一的方法,只是一个例子):

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

    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
    '''
    

    我希望你有一个想法。

    【讨论】:

    • 谢谢!这正是我现在想要的。至此,我对 ForeignKey 和 ManytoMany 关系的想法也清晰了一点。
    猜你喜欢
    • 2015-11-02
    • 2015-07-20
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多