Django ORM запрашивает данные в JSONField
class GiftItem(models.Model):
myjsonfield = models.JSONField(null=True)
Данные в myjsonfield
представлены в этих форматах
Запись 1:
{
"name": "Birthday Present Box",
"category": "Gifts",
"choices": [
{
"name": "Watch", "points": 31.89
}, {
"name": "Perfume", "points": 19.07
}, {
"name": "Bracelet", "style": "Gold 9k", "points": 43.5
}
]
}
Запись 2:
{
"name": "Wedding Present Box",
"category": "Anniversary",
"choices": [
{
"name": "Diamond Ringh", "points": 31.89
},{
"name": "Gold Chain", "points": 29.97
"reviews": [{"User": "John", "rating": 5}, {"User": "Joe", "rating": 8}]
},{
"name": "Bracelet", "style": "Gold 18k", "points": 73.2
}
]
}
Я могу перечислить все записи, где первый элемент watch
:
GiftItem.objects.filter(myjsonfield__choices__0__name="Watch")
ИЛИ показать все записи, у которых есть watch
GiftItem.objects.filter(myjsonfield__choices__contains=[{'name': 'Watch'}])
** Вопрос 1: ** Я хочу перечислить все записи, которые имеют любой из вариантов выбора.points > 50 or < or = to some int.
Вопрос 2:
У меня есть еще несколько непоследовательно вложенных данных, например, выше запись 2 имеет ключ reviews.
Есть ли способ перечислить все записи без необходимости указывать полный путь? myjsonfield__has_key="reviews"
не работает, пока я не укажу полный путь myjsonfield__choices__has_keys="reviews"
Пожалуйста, посоветуйте.