Поисковый запрос Django в данных JSON

Неподдерживаемый поиск 'name' для JSONField или присоединение к полю не разрешено.

Ошибка: FieldError в /search/

Неподдерживаемый поиск 'name' для JSONField или присоединение к полю не разрешено.

views.py

    query = request.GET.get('search')
    if query:
        product_list = product_list.filter(
            Q(product_name__icontains=query) |
            Q(brand__brand_name__icontains=query) |
            Q(model__name__icontains=query) |
            Q(gtin_no__icontains=query) |
            Q(oem_no__icontains=query) |
            Q(tag__icontains=query)
        )

models.py

    product_name = models.CharField(max_length=300)
    slug = models.SlugField(unique=True, editable=False, max_length=300)
    category = models.ForeignKey('ProductCategory', null=False, on_delete=models.CASCADE, max_length=100)
    brand = models.ManyToManyField('Brand', null=True, max_length=100)
    model = JSONField(null=True, max_length=10000)
    product_code = models.CharField(blank=True, max_length=20)
    gtin_no = JSONField(blank=True, max_length=10000)
    oem_no = JSONField(blank=True, null=True, max_length=10000)
    tag = JSONField(blank=True, null=True, max_length=10000, default=None)

Пример JSON данных модели:

{
    "data": "[['Car Parts', 'Ssangyong'], ['Industrial Parts', 'Lombardini'], ['Mercedes-Benz Sprinter', 'Sprinter OM 601, OM 602 DE LA']]"
}

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

{
    "data": [
        "4047755219970"
    ]
}

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

{
    "data": [
        "624 320 0028",
        "625 320 0028"
    ]
}

Иногда эти данные JSON могут быть пустыми.

{
    "data": [
        "None"
    ]
}

После этого:

query = request.GET.get('search')
    if query:
        product_list = product_list.filter(
            Q(product_name__icontains=query) |
            Q(brand__brand_name__icontains=query) |
            Q(model__name__icontains=query) |
            Q(gtin_no__icontains=query) |
            Q(oem_no__icontains=query) |
            Q(tag__icontains=query)
        )

Вы можете подставить product_list к context следующим образом:

context = {
   "products": product_list # <- you can name it whatever you want.
}

Затем сделайте следующее для передачи контекста в любой html-файл, с которым вы работаете:

render(request, "path/to/htmlfile", context=context, status=200) # by the way, you can set status code here.
Вернуться на верх