我正在为用户聊天系统创建一个私人用户,现在我通过用户个人资料中的视图显示所有对象,例如user = userComment.objects.all()
。
问题在于每个人都可以阅读每个人的聊天消息,我想过滤它,这样只有收件人和发件人才能阅读他们发送给对方的消息。
如果过滤它是这样的:userComment.objects.filter(sender=request.user)
那么只会显示已发送的消息。
如果我按照这样过滤:userComment.objects.filter(recipient=request.user)
那么只会显示收到的消息。
我想过滤它,只有 收件人,发件人才能阅读他们的聊天内容。
不这样:
models.py
class userChat(models.Model):
sender = models.ForeignKey(User, related_name="sender")
receiver = models.ForeignKey(User, blank=True, null=True, related_name="receiver")
sent_at = models.DateTimeField(auto_now_add=True)
comment = models.TextField(max_length=255, null=True)
def __str__(self):
return str(self.sent_at)
模板/的 file.html
{% for user in users %}
{% if user.client == request.user %}
<li style="text-align:left; background:yellow;">
<p>from {{ user.client }} to <strong>{{ user.worker }} </strong> | {{ user.sent_at }}</p>
<p>{{ user.comment }}</p>
</li>
{% else %}
<li style="text-align:right; background:#eaeaea;">
<p>from {{ user.client }} to <strong>{{ user.worker }}</strong> | {{ user.sent_at }}</p>
<p>{{ user.comment }}</p>
</li>
{% endif %}
{% endfor %}
更新:按照丹尼尔罗斯曼的例子,我试过这个:
filter(Q(recipient=request.user) | Q(sender=request.user)).order_by('sent_at')
问题是其他用户仍然可以看到收件人和发件人之间的聊天消息。
答案 0 :(得分:2)
使用Q
进行OR查询。
from django.db.models import Q
UserComment.objects.filter(Q(sender=request.user) | Q(receiver=request.user))