Django Query: компиляция данных с разницей в секундах в TimeField - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующая модель в моем приложении Django:

class PeopleCount(models.Model):
    """
    A webapp model classs to store People Count Details.
    """
    timestamp = models.DateTimeField(auto_now=True)
    people_count_entry = models.IntegerField(blank=True, null=True)
    people_count_exit = models.IntegerField(blank=True, null=True)
    store = models.ForeignKey(Store, blank=True, null=True)
    profile = models.ForeignKey(Profile)
    camera = models.ForeignKey(Camera)
    recorded_time = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return "People Count {}".format(self.timestamp)

    class Meta:
        verbose_name = "People Count"
        verbose_name_plural = "People Count"
        ordering = ['-recorded_time']

Я хочу распечатать значения PeopleCount, где, если разница между временем зачисления двух объектов составляет менее 1 секунды, я могуагрегировать их значения.Например:

  • Допустим, я получаю PeopleCountObjA -> в 11:30:21 (где people_count_entry было 4)
  • И затем я получаю другое значение PeopleCountObjB -> в 11:30: 22 (где people_Count_entry было 2)
  • Я должен получить ответ, поскольку счетчик группы должен быть 6
    • Время 11:30:21 и 11:30:22 относится к полю записанному времени из модели,

Я попытался использовать агрегированный запрос, но не смог вставить фильтр для разницы дельты в одну секунду.

Надеюсь, у меня возник вопрос с вопросом.ТИА

1 Ответ

0 голосов
/ 13 сентября 2018

AFAIK, Вы не можете выполнить эту операцию, поскольку Django не предоставляет комбинированных проверок / аннотаций над наборами запросов.

Логически вы пытаетесьсравнивайте объекты друг с другом, которые могут иметь комбинации nC2 (если у вас 100 объектов, вам нужно проверить 4950 комбинаций, 100C2=4950), что невозможно сделатьчерез базу данных / django orm

...