django - Django Json Field Query
问题描述
I've a JSONField in my model which is storing below types of data.
[
{
"name":"Name A",
"type":"Type1",
"class_type":"Class A"
},
{
"name":"Name B",
"type":"Type1",
"class_type":"Class A"
},
{
"name":"Name C",
"type":"Type2",
"class_type":"Class A"
}
]
I've tried with the example of django documentation. But still return Null
I've tried with SampleCategory.objects.filter(books__name = 'Name A')
解决方案
根据文档,您可以book__name
在定义 json 数据时使用,如下所示:
data = {
"name":"Name A",
"type":"Type1",
"class_type":"Class A"
}
SampleCategory.objects.create(books=data)
SampleCategory.objects.filter(books__name = 'Name A')
或者,如果您将其定义为数组:
data = [
{
"name":"Name A",
"type":"Type1",
"class_type":"Class A"
},
{
"name":"Name B",
"type":"Type1",
"class_type":"Class A"
},
{
"name":"Name C",
"type":"Type2",
"class_type":"Class A"
}
]
SampleCategory.objects.create(books={'book':data})
SampleCategory.objects.filter(books__0__name = 'Name A')
如果您有一个具有类似结构化字典的数组,请考虑制作单独的模型字段并创建不同的条目。像这样:
class Book(models.Model):
name = models.CharField(max_length=255)
type = models.CharField(max_length=255)
class_type = models.CharField(max_length=255)
并将其用作 FK 以SampleCategory
:
class SampleCategory(models.Model):
books = models.ForeignKey(Book)
然后,您可以在给定问题中按照您想要的方式进行查询(例如SampleCategory.objects.filter(books__name = 'Name A')
)。希望能帮助到你。
推荐阅读
- ruby-on-rails - 是否可以在 rails mailer 的主题中使用实例或变量,以及如何使用:)
- php - 什么将是 laravel 查询以最大程度对文章进行排序
- python - TypeError: 不支持的操作数类型 -: 'int' 和 'StandardScaler
- flutter - fastlane - 无法发布到 google playstore
- android - 为什么在 kotlin 中使用 Databinding 时找不到 LoginFragmentBindingImpl?
- android - BottomNavigationView + 在导航到不同选项卡时保存片段状态
- css - 使用带有样式组件的 env() css 变量
- c - C 头文件和#define 指令
- oracle - 通过 DB Link 从 MariaDB 获取 LONGTEXT 到 Oracle
- react-native - 在 react-navigation 的 createMaterialTopTabNavigator 上制作动态选项卡