söz*_*öze 5 python django json django-models
我有一个模型X与田间自定义的JSON data可能会或可能不会有这些键:key1,key2,key3。我需要一种使用过滤所有实例的方法key1。
我尝试这样做:
queryset = X.objects.all()
queryset = queryset.annotate(
has_key1=(
Case(
When(~Q(data__key1__in=[None, '']), then=True),
default=False,
output_field=models.BooleanField())
)
)
Run Code Online (Sandbox Code Playgroud)
但是queryset.filter(has_key1=True)没有返回任何内容,但是有一些带有key1的记录。
直接过滤器:queryset.filter(data__key1__in=[1])可以。有人对此有解决方案吗?谢谢。
小智 9
您可以has_key在JSONField上使用。JSONField和HStoreField共享此查找文档。
X.objects.filter(data__has_key='key_1')
Run Code Online (Sandbox Code Playgroud)
这是一个基于我的项目的示例,我has_key在FilterSet(django_filters.rest_framework)中使用JSONField来实现按键过滤(如果键不存在,则返回0个结果):
filter.py:
class XFilter(FilterSet):
data_search_by_key = django_filters.CharFilter(method='filter_data_key',
help_text='Search by key')
def filter_data_key(self, qs, name, value):
qs = X.objects.filter(data__has_key=value)
return qs
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法排除所有NULL值和空字符串:
queryset = queryset.exclude(data__key1__isnull=True).exclude(data__key1__exact='')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2887 次 |
| 最近记录: |