如何过滤私人用户与用户的互动?

时间:2017-01-06 21:08:33

标签: python django django-filter

我正在为用户聊天系统创建一个私人用户,现在我通过用户个人资料中的视图显示所有对象,例如user = userComment.objects.all()

问题在于每个人都可以阅读每个人的聊天消息,我想过滤它,这样只有收件人和发件人才能阅读他们发送给对方的消息。

如果过滤它是这样的:userComment.objects.filter(sender=request.user)那么只会显示已发送的消息。

如果我按照这样过滤:userComment.objects.filter(recipient=request.user)那么只会显示收到的消息。

我想过滤它,只有 收件人,发件人才能阅读他们的聊天内容。

为什么我要将其过滤为一个变量?所以它看起来像这样:enter image description here

这样:

enter image description here

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')

问题是其他用户仍然可以看到收件人和发件人之间的聊天消息。

1 个答案:

答案 0 :(得分:2)

使用Q进行OR查询。

from django.db.models import Q
UserComment.objects.filter(Q(sender=request.user) | Q(receiver=request.user))