python - django; 有没有办法组合过滤对象的结果
问题描述
我是 Django 新手,我正在过滤一个对象,但也许我正在使用愚蠢的方式。如果发送者和接收者匹配,我想要做的是获取名为 Message 的对象。我正在创建一个类似聊天的页面。目前'views.py'是这样的,
def message(request, user_id):
'''Direct message between users'''
#Get an user that the user is sending messages to
someone = CustomUser.objects.get(id=user_id)
#Get past messages
past_messages = Message.objects.filter(someone=someone, user=request.user)
models.py
是这样的
class Message(models.Model):
text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
#Has a relationship with the user
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='myself')
#Has a relationship with the someone who the user is talking to
someone = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='someone')
但是对于这种方式,我只能收到我发送的消息,而无法收到我正在聊天的用户发送给我的消息。
所以我想知道是否有一种方法可以组合过滤对象的结果,基本上我想同时获取用户发送给某人的消息和某人发送给用户的消息并按日期排序。但是我没有想出一个好的方法来做到这一点。谁能给我提示?
基本上我想要做的是同时filter(someone=someone, user=request.user)
获得filter(someone=request.user, user=someone)
解决方案
好吧,我们可以制作一个过滤器来过滤两种情况的析取:
user
是request.user
和someone
是user_id
; 和someone
是request.user
和user
是user_id
。
我们可以这样写:
from django.db.models import Q
def message(request, user_id):
past_messages = Message.objects.filter(
Q(user=request.user, someone_id=user_id) |
Q(user_id=user_id, someone=request.user)
)
因此,我们用一个Message
查询在两个方向上查询 s 。
推荐阅读
- reactjs - 如何通过浅层安装 React 功能组件对反应钩子进行单元测试?
- angular - 如何在角度单元测试中模拟组件中的 store.pipe
- xml - 如何使用 XSLT 2.0 将 csv 文件转换为结构化 XML 文件?
- css - 如何在 Windows 上将 docker nginx 与 express 和 react 应用程序连接起来
- c# - 在 IDbCommandTreeInterceptor (EF 6.4) 中访问查询参数
- javascript - 使用 CSS 和 JS 过滤表
- angular - Quill.register 未被识别为函数
- mysql - MySql:如何在单个“\”反斜杠上拆分字符串
- css - 实现 Google 自定义搜索时覆盖 CSS 样式
- java - 如何使用 Dart 加密视频文件?