【问题标题】:Unique text message objects ordered by date query Django ORM按日期查询 Django ORM 排序的唯一文本消息对象
【发布时间】:2019-11-14 17:56:48
【问题描述】:

我有一个短信模型如下:

    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 是唯一的并且短信是最近的短信。例如,如果我有短信:

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

但它没有给我预期的结果。任何帮助将不胜感激!

【问题讨论】:

  • “没有用”是什么意思?它引发了异常吗?是否订购不当?如果是这样,请包括该堆栈跟踪或错误排序的 QuerySet。
  • 对不起,我应该指定的。问题已更新!
  • 你能展示它给出的结果吗?这将有助于确定模式,从而找到具体问题。

标签: python sql django orm unique


【解决方案1】:

试试下面的查询。

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

DISTINCT ON 表达式必须匹配最左边的 ORDER BY 表达式。因此,通过将您在distinct 中使用的列设为 order_by 中的第一列应该可以工作。

【讨论】:

  • 只是好奇,能不能加个等效的SQL查询?
  • @JPG 详情请查看SO question
猜你喜欢
  • 1970-01-01
  • 2017-04-14
  • 2015-05-08
  • 2015-06-21
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 2019-07-05
相关资源
最近更新 更多