Как отфильтровать 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)