Django-注释最新的孩子的列值以进行查询

时间:2018-12-11 07:26:47

标签: python django python-3.x django-2.1

我有一个Trade,它是TradeLeg的父公司。 我现在正在查询交易,需要注释添加到该查询中的最新TradeLeg的“日期”。

这是我的模特:

class Trade(models.Model):
    name = models.CharField(
        default='',
        max_length=50,
        blank=True,
    )
    date = models.DateField(
        default='',
        blank=True,
        null=True,
    )


Class TradeLeg(models.Model):
    trade = models.ForeignKey(
        Trade,
        on_delete=models.CASCADE
    )
    date = models.DateField(
        default='',
        blank=True,
        null=True,
    )

这是我的错误查询:

trades = Trade.objects.all().annotate(latest_leg_date='tradeleg__date__first')

2 个答案:

答案 0 :(得分:2)

尝试使用Max()功能

from django.db.models import Max

trades = Trade.objects.all().annotate(latest_leg_date=Max('tradeleg__date'))

答案 1 :(得分:0)

这是获得最新交易的最简单和专业的方式

latestTrades = Trade.objects.filter().order_by('-tradeleg__date')

但是,如果您使用 Max Min 函数,它将给出相同的查询,因此可能导致错误