【问题标题】:Group private messages in Django by users用户在 Django 中对私人消息进行分组
【发布时间】:2019-01-26 20:15:45
【问题描述】:

我在 Django 中为注册用户构建了一个私人消息系统,我有一个小问题。我想不出一种按用户对消息进行分组的方法。

下图显示了两个用户之间的消息。这是用户 karolann 看到的对话。您可以看到它没有正确分组消息。 “Hello Susan” 和 “这两个模块非常具有挑战性” 应该出现在最后一句话之后 - “当你在线时给我发短信。”.

现在,邮件按发件人分组。如果我按接收器对它们进行分组,它仍然无法正常工作。它需要一些共同的东西,比如对话 ID 或其他东西。

所以我的问题是:如何创建对话?我希望两个用户之间的所有消息都在同一个地方。

我的models.py如下:

我的views.py如下:

最后,我的模板:

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    您应该从两个用户端一起为发送者和接收者应用多个过滤器,然后加入它们。 在这种情况下,使用 dictsort 和 regroup 将不起作用。

    要获取 user/other_user 对话中的所有消息,您需要:

    Message.objects.filter(sender=user.profile, reciever=other_user.profile)|Message.objects.filter(receiver=user.profile, sender=other_user.profile)
    

    (注意 | 运算符可用于联合)

    您应为视图中的每个对话创建这些查询,并在模板上下文中传递这些查询的列表。

    【讨论】:

    • 感谢您的回复,@philoj。那么我应该遍历所有注册的用户吗?我不太明白。在我看来,我可以获得我想要的用户(user.profile),但不确定另一个用户 - other_user.profile。
    • 遍历所有其他至少向当前用户发送过一次消息的用户。
    • 我的意思是遍历所有其他给当前用户发消息或收到他消息的用户。同样,您必须为此加入两个查询
    • 我会接受你的回答,因为这是一个合理的解决方案,即使它在我的情况下不起作用。无论如何,谢谢!
    【解决方案2】:

    对于尝试在 Django 中执行此操作的人,我推荐此解决方案 - https://stackoverflow.com/a/43697388/10036828。

    这是我让它发挥作用的唯一方法。

    【讨论】:

      猜你喜欢
      • 2016-05-07
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多