【问题标题】:How to Apply Query Filtering for JSON list like structure in Django [duplicate]如何在 Django 中对类似结构的 JSON 列表应用查询过滤 [重复]
【发布时间】:2019-11-19 15:08:53
【问题描述】:

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": "horror", "rating": 4}   

>>> Movies.objects.filter(movies_json_data__rating=5)
<QuerySet [<Movies: Inception>]>

当数据在 JSON 结构之类的列表中时,如何执行过滤查询?

movies_json_data=[{"review": "horror", "rating": 4},{"review":"horror-with-scify","rating":"4.5"}]

【问题讨论】:

    标签: django django-models django-rest-framework django-views


    【解决方案1】:

    对于一部电影,您可以执行以下操作:

    kwargs = {
        'movies_json_data__{}'.format('review'): 'horror',
        'movies_json_data__{}'.format('rating'): 4
    }
    
    Movies.objects.filter(**kwargs)
    

    所以基本上,您现在可以编写一个 for 循环并执行通用方法。假设您想做一个OR 过滤器,以便获得与任何过滤器匹配的电影

    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)
    

    【讨论】:

      猜你喜欢
      • 2013-03-11
      • 2012-03-07
      • 2020-06-02
      • 1970-01-01
      • 2020-03-06
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多