Django增加额外的列分组

2024-09-30 18:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下查询集:

Pago.objects.filter(created__range=(self.inicio, self.fin)).values('tipo__nombre').annotate(monto=Sum('monto'))

它正在生成以下SQL:

SELECT "invoice_tipopago"."nombre", SUM("invoice_pago"."monto") AS "monto" FROM "invoice_pago" INNER JOIN "invoice_tipopago" ON ( "invoice_pago"."tipo_id" = "invoice_tipopago"."id" ) WHERE "invoice_pago"."created" BETWEEN 2015-01-01 00:00:00-06:00 AND 2015-06-04 14:18:00-06:00 GROUP BY "invoice_tipopago"."nombre", "invoice_pago"."modified", "invoice_pago"."created" ORDER BY "invoice_pago"."modified" DESC, "invoice_pago"."created" DESC

它添加了我没有指定的额外修改和创建的列,我想知道如何避免它。应该注意,Pago是从django扩展timestamesedmodel类派生的。你知道吗

提前谢谢。你知道吗


Tags: selfidbyobjectsinvoicefilterdescmodified
1条回答
网友
1楼 · 发布于 2024-09-30 18:18:06

我看了一下TimeStampedModel,它在类meta中设置了一个默认的ordering

class TimeStampedModel(models.Model):
""" TimeStampedModel
An abstract base class model that provides self-managed "created" and
"modified" fields.
"""
created = CreationDateTimeField(_('created'))
modified = ModificationDateTimeField(_('modified'))

class Meta:
    get_latest_by = 'modified'
    ordering = ('-modified', '-created',)
             # ^^^^^^^^^^^^^^^^^^^^^^^^^^
    abstract = True

see in github

您可以通过提供另一个要排序的筛选器(如tipo__nombremonto)来覆盖它,例如:

Pago.objects.filter(
    created__range=(self.inicio, self.fin)
).values(
    'tipo__nombre'
).annotate(
    monto=Sum('monto')
).order_by(
    'tipo__nombre'
)

相关问题 更多 >