首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django: Messages App

Django: Messages App
EN

Stack Overflow用户
提问于 2017-10-30 23:29:29
回答 1查看 126关注 0票数 0

这是我的模型,

代码语言:javascript
复制
class Message(models.Model):
    sender = models.ForeignKey(User, related_name="sender")
    receiver = models.ForeignKey(User, related_name="receiver")
    msg_content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

我想根据谁向request.user发送消息或request.user最近向谁发送消息来对用户进行排序!正如我们在社交网络上看到的那样。

这就是我试过的

代码语言:javascript
复制
users = User.objects.filter(Q(sender__receiver=request.user) | Q(receiver__sender=request.user)).annotate(Max('receiver')).order_by('-receiver__max')

只有当request.user向某人发送消息时,此代码才能正常工作。它不会改变消息的顺序,以防有人向request.user发送消息。

我也试过了

代码语言:javascript
复制
users = Message.objects.filter(sender=request.user, receiver=request.user).order_by("created_at")

但是,我不能过滤掉不同的用户。它显示的用户数量与消息数量相同。

我如何解决这个问题?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-10-31 00:07:41

我在尝试查找已验证用户的对话时遇到了同样的问题。我使用了以下解决方案:

代码语言:javascript
复制
def is_message_in_list(self, conversations, message):
    for msg in conversations:
        if (msg.sender == message.sender and msg.receiver == message.receiver) or \
           (msg.sender == message.receiver and msg.receiver == message.sender):
            return True

    return False

def get(self, request):
    user = request.user
    messages = Message.objects.filter(
        Q(sender=user) | Q(receiver=user)
    ).order_by('-created_at').select_related('sender', 'receiver')

    conversations = []
    for message in messages:
        if not self.is_message_in_list(conversations, message):
            conversations.append(message)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47018940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档