首页 > 解决方案 > 从最接近日期的对象获取标题,django模型

问题描述

我要模特:
周:

class Week(models.Model):
    week_id = models.Charfield(unique=True, null=False, primary_key=True)
    year = models.PositiveSmallInteger()
    weeknumber = models.PositiveSmallInteger()
    ...


截止日期

class Deadline(models.Model):
    deadline_type = models.CharField()
    end_at = models.DateTimeField(blank=False)
    week_id  = models.ForeignKey(Week, related_name='deadlines', on_delete=models.CASCADE)
   ...

这给了我这样的输出:

{
    "weeknumber": 1,
    "leaflet_year": 2019,
    "week_id": "01_2019",
    "deadlines": [
        {
            "deadline_type": "Some Deadline type",
            "end_at": "2019-10-23T14:00:00Z",
        },
    ...
    ]
}

我想要实现的是用最接近今天deadline_type的截止日期对象来注释 Week 对象。end_at

我可以注释结束日期,但我根本不知道如何获取类型。

标签: djangodjango-rest-framework

解决方案


我认为您可以使用subquery这样做:

from django.models.db import Subquery, OuterRef


deadline = Deadline.objects.filter(week_id=OuterRef('pk')).order_by('end_at')

weeks = Week.objects.all().annotate(closest_deadline_type=Subquery(deadline.values('deadline_type')[:1]))

推荐阅读