【问题标题】:How to return all the message between two Users - Django/Python/Chat Building如何返回两个用户之间的所有消息 - Django/Python/Chat Building
【发布时间】:2022-01-13 18:56:30
【问题描述】:

我正在用 Python 中的 Django-Rest-Framework 构建一个简单的聊天。 我为用户和聊天创建了一个 GET/POST 方法。

型号

from django.db import models
from django.db.models.base import Model

class User(models.Model):

    class Meta:

        db_table = 'user'

    user_firstname = models.CharField(max_length=200)
    user_lastname = models.CharField(max_length=200)

class Chat(models.Model):

    class Meta:

        db_table = 'chat'
    
    from_message = models.ForeignKey(User, on_delete=models.CASCADE, related_name='+')
    message = models.CharField(max_length=1000)
    to_message = models.ForeignKey(User, on_delete=models.CASCADE, related_name='+')

序列化器

from rest_framework import serializers
from .models import User, Chat

class UserSerializer(serializers.ModelSerializer):

    class Meta:

        model = User
        fields = '__all__'

class ChatSerializer(serializers.ModelSerializer):

    class Meta:

        model = Chat
        fields = '__all__'

网址

from django.urls.conf import re_path
from . import views

urlpatterns = [
    re_path(r'^users/$', views.UserList.as_view(), name='users-list'),
    re_path(r'^chat/$', views.ChatList.as_view(), name='chat-get-list'),
    re_path(r'^chat/(?P<from_id>.+)&(?P<to_id>.+)/$', views.ChatList.as_view(), name='chat-list'),
]

观看次数

from rest_framework import generics, serializers
from .models import User, Chat
from .serializers import ChatSerializer, UserSerializer

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get_queryset(self):

        queryset = User.objects.all()
        return queryset

class ChatList(generics.ListCreateAPIView):
    queryset = Chat.objects.all()
    serializer_class = ChatSerializer

    def get_queryset(self):
        queryset = Chat.objects.all()
        from_id = self.request.query_params.get('from_id')
        to_id = self.request.query_params.get('to_id')

        if from_id is not None and to_id is not None:
            queryset = Chat.objects.filter(from_message=from_id,to_message=to_id)
 #Probably my error is here, because I'm specifying the messages. I need to add something like 'to_message=to_id or from_id
        
        return queryset

问题: 当我发送消息时,我通知了一个from_id,to_id和一个消息本身,例如:

{
    "from_id":1,
    "message":"I'm sending a message to you",
    "to_id":2
},
{
    "from_id":2,
    "message":"I'm replying your message",
    "to_id":1
}

但是当我尝试获取两个人之间的所有消息时,我得到的只是从_id 发送到 to_id 的内容,但我还需要返回回复的内容,在该示例中为“我正在回复您的消息” ”。

我知道我的问题可能出在过滤器上,但我不知道如何以另一种方式构建。

那么如何返回两个用户之间的所有消息

【问题讨论】:

  • 为什么不试试django channels,它会让事情变得更容易。
  • 我正在努力学习纯Django开发rest服务!那是一个练习……但很高兴了解该选项。谢谢!

标签: python django django-rest-framework chat


【解决方案1】:

要解决这个问题,只需添加 views

queryset1 = Chat.objects.filter(from_id=from_id,to_id=to_id)
queryset2 = Chat.objects.filter(from_id=to_id,to_id=from_id)
queryset =  queryset1.union(queryset2)

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 2018-07-28
  • 2022-07-28
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
相关资源
最近更新 更多