首先,您的 JSON 格式不正确。我想它应该是:
[{'brand_id': 1, 'name': 'b1'}, {'brand_id': 2, 'name': 'b2'}]
如果是这种情况,要在这样的 blob 中测试 1,类似这样的内容会告诉您 1 是否可以在 JSON 中的任何地方作为值找到:
def check_for_one(json_data):
return any([1 in data.values() for data in json_data])
但您想具体了解1 是否为键所拥有的值
brand_id JSON 中的任何位置,因此您还可以使用循环添加一些额外的条件:
def check_for_one(json_data):
match = []
for data in json_data:
for key, value in data.items():
if key == 'brand_id' and value == 1:
match.append(True)
return any(match)
你可以像这样在你的模型类中加入诸如方法之类的逻辑:
class A(models.Model):
brand = JSONField()
def check_for_one_comprehension(self):
return any([1 in data.values() for data in self.brand])
def check_for_one_loop(self):
match = []
for data in self.brand:
for key, value in data.items():
if key == 'brand_id' and value == 1:
match.append(True)
return any(match)
但是,如果您真的想从数据库中过滤实例,其中 JSON 数据是顶层数组和 brand_id == 1,则需要一种不同的方法,应该这样做:
A.objects.filter(brand__contains=[{'brand_id': 1}])
注意额外的[{}] 大括号!如果你只是调用contains=['brand_id': 1],它会抛出一个语法错误,如果你调用contains={'brand_id': 1},它将不匹配。