Получить название от объекта, ближайшего к дате, модель Джанго - PullRequest
0 голосов
/ 23 января 2019

У меня к моделям:
Неделя:

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

и
Deadline

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",
        },
    ...
    ]
}

То, чего я хочу достичь, это аннотировать объект Week с помощью deadline_type объекта крайнего срока, который имеет end_at, ближайший к сегодняшнему дню.

Я могу комментировать дату окончания, но я просто не знаю, как получить тип.

1 Ответ

0 голосов
/ 23 января 2019

Я думаю, что вы можете сделать это, используя подзапрос :

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]))
...