这是我的模型,
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最近向谁发送消息来对用户进行排序!正如我们在社交网络上看到的那样。
这就是我试过的
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发送消息。
我也试过了
users = Message.objects.filter(sender=request.user, receiver=request.user).order_by("created_at")但是,我不能过滤掉不同的用户。它显示的用户数量与消息数量相同。
我如何解决这个问题?谢谢!
发布于 2017-10-31 00:07:41
我在尝试查找已验证用户的对话时遇到了同样的问题。我使用了以下解决方案:
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)https://stackoverflow.com/questions/47018940
复制相似问题