【问题标题】:Django database: how to apply .annotate() and .aggregate() across all columns?Django 数据库:如何在所有列中应用 .annotate() 和 .aggregate()?
【发布时间】:2020-04-13 16:33:06
【问题描述】:

假设我在 django 中有以下模型:

class MyModel(models.Model):
    foo = models.CharField(max_length=100)
    bar = models.CharField(max_length=100)

现在我想找出模型中每一列的最长条目的长度。

我可以使用以下命令对单个字段执行此操作:

MyModel.objects.annotate(length = Length('foo')).aggregate(Max('length'))

如何在一个命令中一次将此命令应用于表的所有字段(列)?

【问题讨论】:

  • 它是否有效MyModel.objects.all().aggregate(Max('foo'))
  • 不,这会将Max 函数应用于字段,而不是字段的长度。

标签: python sql django database django-models


【解决方案1】:

你可以这样写:

MyModel.objects.aggregate(max_length=Max(Length('foo')))

对于所有模型列,您可以在每一行中找到最大长度并在聚合后:

MyModel.objects.annotate(
    row_max_length=Greatest(Length('foo'), Length('bar'))
).aggregate(max_in_model=Max('row_max_length'))

【讨论】:

  • 是的,但这仅适用于 foo 字段。我想一次对所有字段都这样做。
猜你喜欢
  • 2020-01-09
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2020-04-23
  • 2019-12-02
  • 2022-08-16
相关资源
最近更新 更多