Django JSONField вложено больше, чем операция - PullRequest
0 голосов
/ 06 августа 2020

Вот структура JSONField - данные, которые у меня есть.

data : {
 "animals" : [
     "animal_id" : 2321, 
     "legs" : [
      {
         "name" : "front",
         "measured_at" : 1596740795.453353
      },
      {
         "name" : "back",
         "measured_at": 1596740795.453353
      }
     ]
 ]
}

Мне нужно найти все записи, которые соответствуют следующему условию

  1. leg-name = "front" ИЛИ
  2. измеренное значение больше, чем через 6 часов.

Я пробовал следующее

six_hrs_ago = (datetime.utcnow() - timedelta(hours = 6)).timestamp()

obj = Model.objects.filter(data__has_key='animals').
        filter(Q(data__animals__legs__name="front") | Q(data__animals__legs__measured_at__gt = six_hrs_ago))))

Это не работает и не получает никаких записей .

Я также пытался просто отфильтровать записи с помощью leg - name - front, это тоже не работает

obj = Model.objects.filter(data__animals__contains=[{'legs': [{"name": "front"}]}])

Любые идеи приветствуются.

...