Python 如何过滤私人用户对用户的交互?
我正在创建一个私有的用户对用户聊天系统,目前我正在通过用户配置文件中的视图显示所有对象,如下所示Python 如何过滤私人用户对用户的交互?,python,django,django-filter,Python,Django,Django Filter,我正在创建一个私有的用户对用户聊天系统,目前我正在通过用户配置文件中的视图显示所有对象,如下所示user=userComment.objects.all() 问题是,每个人都可以阅读每个人的聊天信息,我想对其进行过滤,以便只有收件人和发件人可以阅读他们发送给对方的信息 如果像这样过滤:userComment.objects.filter(sender=request.user)则只显示已发送的消息 如果我这样过滤:userComment.objects.filter(recipient=requ
user=userComment.objects.all()
问题是,每个人都可以阅读每个人的聊天信息,我想对其进行过滤,以便只有收件人和发件人可以阅读他们发送给对方的信息
如果像这样过滤:userComment.objects.filter(sender=request.user)
则只显示已发送的消息
如果我这样过滤:userComment.objects.filter(recipient=request.user)
则只显示收到的消息
我想对其进行过滤,以便只有收件人和发件人可以阅读他们的聊天记录
为什么要将其过滤为一个变量?所以它可以是这样的:
而不是像这样:
型号.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)
template/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 %}
问题是另一个用户仍然可以看到收件人和发件人之间的聊天信息。使用
Q
进行OR查询
from django.db.models import Q
UserComment.objects.filter(Q(sender=request.user) | Q(receiver=request.user))
这有一个问题,我希望对象按datetime(sent_at)排序,您发送给我的示例作为我添加的第二个图像示例进行排序,我是否应该使用order_by,但如何使用?只需按正常方式将其添加到末尾。检查更新,问题是,另一个用户仍然可以看到收件人和发件人之间的聊天信息。/comment/那么您当然只需要在该视图中检查username是否为当前用户。
from django.db.models import Q
UserComment.objects.filter(Q(sender=request.user) | Q(receiver=request.user))