Сложная фильтрация Django Model на основе массива внутри JSONField

Я прочитал все вопросы, которые имели хоть какое-то отношение к тому, что я пытаюсь достичь, но все еще не повезло. Единственный, который немного помог мне, это этот Как фильтровать JSON массив в Django JSONField, но мне все еще нужно что-то дополнительное.

Мне нужно вернуть профили, которые предоставляют определенную услугу (отфильтрованную по service_id) в определенном ценовом диапазоне.

Это модель:

class Profile(models.Model):
   tagline = models.CharField(null=True, blank=True, max_length=40)
   experience_years = models.IntegerField(null=True)
   experience_description = models.CharField(null=True, blank=True, max_length=500)
   services_offered = models.JSONField(null=True)

атрибут services_offered имеет массив объектов JSON, как это:

 "services_offered": [
    {
      "noOfPets": 1,
      "hasDogWalk": "N",
      "pricePerPet": 27,
      "petServiceId": "2",
    },
    {
      "noOfPets": 1,
      "hasDogWalk": "N",
      "pricePerPet": 30,
      "petServiceId": "1",
    },
  ]

Я могу отфильтровать профили, предлагающие определенную услугу (здесь не используется цена), следующим образом:

Profile.objects.filter(services_offered__contains=[{'petServiceId': query_params['service_id']})

Но как я могу отфильтровать профили, которые предлагают определенную услугу в определенном ценовом диапазоне? Другими словами, мне нужно найти JSON объект этой услуги по ID, а затем проверить цену (используя lte и gte) для этой услуги.

Я тоже пробовал, но ничего не возвращается (price_max была установлена очень высокой, на всякий случай):

Profile.objects.filter(Q(services_offered__petServiceId=query_params['service_id'], services_offered__pricePerPet__lte=int(query_params['price_max'])))

Даже это ничего не возвращает:

Profile.objects.filter(Q(services_offered__petServiceId=query_params['service_id']))
Вернуться на верх