按日期查询Django ORM排序的唯一文本消息对象

问题描述 投票:0回答:1

我的短信模型如下:

    class TextMessage(models.Model):
        from_phone_number = models.CharField(max_length=25)
        to_phone_number = models.CharField(max_length=25)
        date_of_message = models.DateTimeField(auto_now_add=True)
        message_body = models.TextField()

我正在尝试返回Django查询集(它为[[必须为查询集),其中from_phone_numbers是唯一的AND文本消息是最新的文本消息。例如,如果我有短信:

**id**| **from_phone_num** | **to_phone_num** | **date_of_message**| **Message body** | 7;"19991112222";"19996667777";"2019-11-13 15:07:53.726911-07";"dupe message 2"; 4;"19993334444";"19996667777";"2019-11-13 13:50:05.921257-07";"dsfsdfsf"; 3;"19992222222";"19995552323";"2019-11-13 13:49:18.503679-07";"TEST123"; 5;"19991112222";"19996667777";"2019-11-13 15:07:21.834347-07";"dupe message 1";
返回的查询集将是:

**id**| **from_phone_num** | **to_phone_num** | **date_of_message**| **Message body** | 7;"19991112222";"19996667777";"2019-11-13 15:07:53.726911-07";"dupe message 2"; 4;"19993334444";"19996667777";"2019-11-13 13:50:05.921257-07";"dsfsdfsf"; 3;"19992222222";"19995552323";"2019-11-13 13:49:18.503679-07";"TEST123";

这是我已经尝试过的查询:

TextMessage.objects.order_by('date_of_message','from_phone_number').distinct('date_of_message', 'from_phone_number')

但是它没有给我预期的结果。任何帮助,将不胜感激!
python sql django orm unique
1个回答
0
投票
尝试以下查询。

TextMessage.objects.order_by('from_phone_number', '-date_of_message').distinct('from_phone_number')

DISTINCT ON表达式必须与最左边的ORDER BY匹配表达式。因此,通过创建该列,您可以将order_by中的第一列应该起作用。
© www.soinside.com 2019 - 2024. All rights reserved.