簡體   English   中英

Django:過濾不同的數據

[英]Django: Filtering Distinct Data

我正在嘗試構建一個消息傳遞應用程序。 這是我的模特,

class Message(models.Model):
sender = models.ForeignKey(User, related_name="sender")
receiver = models.ForeignKey(User, related_name="receiver")
msg_content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)

這是我嘗試過的

data = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).order_by('-created_at')

在我的模板中

{% for abc in data %}
    {{ abc.receiver }}<br />
{% endfor %}

如何打印出不同的用戶?

您可以分別查詢發送者和接收者,然后使用set()獲得不同的值

users = set([x.receiver for x in Message.objects.filter(sender = request.user)] + [x.sender for x in Message.objects.filter(receiver = request.user)]) 

使用您的數據庫結構,我只能通過這樣的數據庫查詢來接收您想要的內容(不確定它是否可以在Django orm中復制):

SELECT u.*, m.*
FROM auth_user u
  INNER JOIN (
     SELECT
       user_id,
       MAX(message_id) AS message_id
     FROM
       (
         SELECT
           m2.receiver_id AS user_id,
           MAX(id)        AS message_id
         FROM yourapp_message m2
         GROUP BY m2.receiver_id
         UNION
         SELECT
           m2.sender_id AS user_id,
           MAX(id)      AS message_id
         FROM yourapp_message m2
         GROUP BY m2.sender_id
       ) t
     GROUP BY user_id) t2 ON u.id = t2.user_id
  INNER JOIN yourapp_message m ON m.id = t2.message_id
ORDER BY m.id DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM