如何在Django中对类似JSON列表的结构应用查询过滤
Django支持使用postgres的jsonfield 下面是基于JSON键、值匹配过滤结果的示例如何在Django中对类似JSON列表的结构应用查询过滤,django,django-models,django-rest-framework,django-views,Django,Django Models,Django Rest Framework,Django Views,Django支持使用postgres的jsonfield 下面是基于JSON键、值匹配过滤结果的示例 OBJ1 : m1 = Movies.objects.create(movie_name='inception',movies_json_data{"review": "Mind Blowing", "rating": 5} OBJ2 : m2 = Movies.objects.create(movie_name='joker',movies_json_data{"review":
OBJ1 : m1 = Movies.objects.create(movie_name='inception',movies_json_data{"review": "Mind Blowing", "rating": 5}
OBJ2 : m2 = Movies.objects.create(movie_name='joker',movies_json_data{"review": "horror", "rating": 4}
>>> Movies.objects.filter(movies_json_data__rating=5)
<QuerySet [<Movies: Inception>]>
对于一部电影,您可以执行以下操作:
kwargs = {
'movies_json_data__{}'.format('review'): 'horror',
'movies_json_data__{}'.format('rating'): 4
}
Movies.objects.filter(**kwargs)
因此,基本上,您现在可以编写for循环并执行一般方法。让我们假设您想要执行或过滤器,以便获得与任何过滤器匹配的电影
from django.db.models import Q
q_objects = Q()
for data in movies_json_data:
kwargs = {}
for k, v in data.items():
kwargs['movies_json_data__{}'.format(k)] = v
q_objects.add(Q(**kwargs), Q.OR)
queryset = Movie.objects.filter(q_objects)
from django.db.models import Q
q_objects = Q()
for data in movies_json_data:
kwargs = {}
for k, v in data.items():
kwargs['movies_json_data__{}'.format(k)] = v
q_objects.add(Q(**kwargs), Q.OR)
queryset = Movie.objects.filter(q_objects)