【问题标题】:Get the top n rows of each day from same table in Django从Django的同一张表中获取每天的前n行
【发布时间】:2020-12-16 04:45:47
【问题描述】:

我确信这不是一个新问题/新问题。我真的试图研究其他解决方案。但是,我找不到如何解决这个问题。

我有一个类似的模型

class Deal(models.Model):
    title = models.CharField(max_length=1500)
    viewCounter = models.SmallIntegerField(default=0)
    thumbsUpCounter = models.SmallIntegerField(default=0)
    createDateTime = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False, related_name='deal_owner',
                          editable=False)

现在我想获得每天按 thumbsUpCounter 和 viewCounter 排序的前 10 个(或更少)交易。我试图查看子查询和 Outerref。但是,我不知道如何才能得到正确的结果。

** 我正在使用 MySQL。

提前致谢。

【问题讨论】:

  • 您是否尝试按日期分组,并找到前 10 名?
  • @ha-neul 是的。这就是我一直在寻找的。谢谢

标签: django django-models django-rest-framework


【解决方案1】:

试试

from django.db.models.functions import TruncDate

query = Deal.objects.annotate(date=TruncDate('createDateTime'))\ # extract date 
        .values('date')\                                        # group by date
        .order_by('-thumbsUpCounter')\                          # order by
         [:10]                                                  # slice first 10

【讨论】:

  • 你能检查一下语法吗?大括号存在一些语法问题。
  • 是的,我错过了第一行的)。更新
  • 非常感谢您的回答。但我收到一个错误“dict”对象没有属性“owner”,owner 是 Deal 模型的另一个模型。你对此有什么想法吗?
  • ?我在您的 q 中的任何地方都没有看到所有者?
  • 我没有意识到外键会给出任何错误。我添加了所有者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多