我是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)
答案 0 :(得分:0)
好吧,我们可以制作一个过滤器,以对两种情况的析取进行过滤:
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
。