Поисковый запрос 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.