2017-01-06 13 views
1

私はユーザチャットシステムにプライベートユーザを作成しています。今のところ私は、user = userComment.objects.all()のようなユーザプロファイルのビューを通してすべてのオブジェクトを表示しています。プライベートユーザをユーザインタラクションにフィルタリングするにはどうすればよいですか?

誰もが全員のチャットメッセージを読むことができ、それをフィルタリングして、受信者と送信者だけが互いに送信したメッセージを読むことができるという問題があります。

フィルタリングする場合は、userComment.objects.filter(sender=request.user)のようになります。送信されたメッセージのみが表示されます。

このようにフィルタリングすると、userComment.objects.filter(recipient=request.user)というメッセージが表示されます。

私はそれをフィルタリングしたいと思います。受信者と送信者はチャットを読むことができます。

なぜ1つの変数にフィルタリングしたいのですか?だから、次のようになります。このような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') 

問題は、別のユーザーがまだ受信者と送信者の間でチャットメッセージを見ることができるということです。

答えて

2

Qを使用してORクエリを実行します。

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

問題は、オブジェクトをdatetime(sent_at)で並べ替えることです。私が送信した例は、私が追加した2番目のイメージ例として注文します。order_byしかし、どのように? – Lindow

+0

通常のように最後に追加するだけです。 –

+0

アップデートを確認すると、別のユーザーが受信者と送信者の間でチャットメッセージを引き続き表示できるという問題があります。 – Lindow

関連する問題