Как отфильтровать JSONField по значению ключа в Django для получения похожих значений с помощью базы данных MySQL/MariaDB

Я пытаюсь получить значения, похожие на определенное ключевое значение из JSONField, используя базу данных mariadb:10.3.28. Я использовал 3 различных варианта, как указано в views.py, все они не работают.

Согласно документации Django (https://docs.djangoproject.com/en/3.1/topics/db/queries/#containment-and-key-lookups) это можно сделать при точном совпадении с ключевым значением, но я хотел бы фильтровать только схожие значения, а не точные.

Есть пример использования KeyTextTransform или KeyTransform (https://code.djangoproject.com/ticket/27205), но он используется только с PostgreSQL.

Есть ли другой способ сделать это с базой данных MySQL или MariaDB?

К следующей конечной точке с именем параметра description выполняется пост-запрос следующим образом:

http://localhost/get_meta/?description=text

Пример данных:

{
  "meta": {
      "description": "The description text.",
      "field": 1
  }
}

models.py

class Model(models.Model):
    meta = models.JSONField(default=dict)

views.py

Вариант 1:

def get_meta(self, request):
    queryset = Model.objects.filter(meta__contains=request.GET.get('description') or "")
    serializer_class = ModelSerializer(queryset, many=True)
    data = {'data': serializer_class.data}
    return Response(data)

Вариант 2:

def get_meta(self, request):
        queryset = Model.objects.filter(meta__description__contains=request.GET.get('description') or "")
        serializer_class = ModelSerializer(queryset, many=True)
        data = {'data': serializer_class.data}
        return Response(data)

Вариант 3:

def get_meta(self, request):
        queryset = Model.objects.filter(meta__contains={'description':request.GET.get('description') or ""})
        serializer_class = ModelSerializer(queryset, many=True)
        data = {'data': serializer_class.data}
        return Response(data)
Вернуться на верх