我正在创建一个私有(private)用户到用户的聊天系统,现在我通过用户个人资料中的 View 显示所有对象,如下所示 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')
问题是其他用户仍然可以看到收件人和发件人之间的聊天消息。
最佳答案
使用Q
进行OR查询。
from django.db.models import Q
UserComment.objects.filter(Q(sender=request.user) | Q(receiver=request.user))
关于python - 如何过滤私有(private)用户与用户的交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514380/