Как написать запрос Django, который объединяет две таблицы без общего столбца и использует формулу для расчета времени? - PullRequest
0 голосов
/ 02 мая 2019

Я использую Django и Python 3.7. Я хочу написать запрос Django, который возвращает экземпляры моей модели Article, но я хочу написать запрос, в котором объединены две таблицы, в которых между ними нет общего ключа. Запрос PostGres будет выглядеть так ...

select a.* 
    FROM myproj_statbyhour h, 
         myproj_article a 
    WHERE h.hour_of_day = extract(hour from a.created_on + 1000 * interval '1 second') 
          and h.total_score < 1000;

Рассматриваемые модели выглядят как

class Article(models.Model):
    objects = ArticleManager()
    title = models.TextField(default='', null=False)
    ...
    created_on = models.DateTimeField(db_index=True, default=datetime.now)


class StatByHour(models.Model):
    total_score = models.DecimalField(default=0, max_digits=12, decimal_places=2, null=False)
    ...
    hour_of_day = IntegerField(
        null=False,
        validators=[
            MaxValueValidator(23),
            MinValueValidator(0)
        ]
    )

Я понятия не имею, как это сделать, особенно как написать часть "h.hour_of_day = extract (час от a.created_on + 1000 * интервал '1 секунда')".

1 Ответ

0 голосов
/ 02 мая 2019

Вам нужны функции извлечения .

from django.db.models.functions import ExtractHour

Article.objects.annotate(
    hour=ExtractHour('created_on'),
).filter(hour=stat_by_hour.hour_of_day)

Однако что-то, о чем вам нужно беспокоиться, это часовые пояса. Документация в конце этого раздела предоставляет несколько способов справиться с этим, хотя, если вы пытаетесь объединить все данные, которые могут быть немного сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...