gpt4 book ai didi

json - 使用 _contains 过滤大于、小于和范围的 JSON 字段 django

转载 作者:行者123 更新时间:2023-11-29 12:03:16 26 4
gpt4 key购买 nike

假设我有这个模型:

class Item(models.Model):
data = JSONField(blank=True, null=True)

然后在控制台中:

>>Item.objects.create(data={'size': 11})
>>Item.objects.create(data={'size': 12})
>>Item.objects.create(data={'size': 13})

我如何过滤传递 JSON 数据的结果,但大小在数字范围内,大于或小于数字?

Item.objects.filter(data__contains={'size': *match this numbers*})

或者有没有其他不使用 data__size__gte 的方法,这样我就可以创建 JSON 变量并自由过滤它们。

最佳答案

所以我前段时间解决了这个问题,一个通知让我想起了这个问题。解决方法很简单。你可以创建一个函数来生成参数字典以传递给过滤器函数。在我的项目中,我使用 json 字段根据类别保存产品的一些数据,因此针对不同的类别,我创建了不同的表单。

假设我有一个名为计算机的类别,我想根据内存的大小筛选“计算机”类别中的产品。

dict_of_parameters = {"attributes__ram__gte": 2, "attributes__ram__lte": 8}
items = Product.objects.filter(**dict_of_parameters) # The ** operator will pass the dictionary as parameters to the function

提示:

要生成参数字典,您有很多选择。在我的例子中,我在类别中有一个字段,其中包含一个字段字典,可用于生成项目并过滤它们。一个 json 字段,比如

some_category.attributes = {"fields":
{
"ram":
{
"type": "number",
"filter_by": ["gte", "lte"]
}
"CPU":
{
"type": "select",
"options": ["I3", "I5", "I7"]
}
}
}

但是您不必将其保存在数据库中,您可以将其保存在 json 文件或任何您想要的文件中。从这里您可以创建一个函数,从该字段生成一个表单,并使用它来生成要传递给过滤器函数的字典。

这使您可以灵活地将数据以 json 格式保存在 Postgre 数据库中并过滤该数据,即使您不知道字段名称或创建新字段也是如此。

关于json - 使用 _contains 过滤大于、小于和范围的 JSON 字段 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com