如何使用 django/postgres 制作嵌套的 jsonb 模型?
How to make nested jsonb model with django / postgres?
我要制作的模型与youtube api模型相似。
{
"videos": [
{
"id": "7lCDEYXw3mM",
"snippet": {
"channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"title": "Google I/O 101: Q&A On Using Google APIs",
"categoryId": "28"
},
"statistics": {
"viewCount": "3057",
"likeCount": "25",
"dislikeCount": "0",
"favoriteCount": "17",
"commentCount": "12"
}
}
]
}
我尝试使用 ArrayField
,但是当我将字段列表发布到数组中时,我一直收到此错误:
"Expected a list of items but got type \"dict\"."
这是目前的模型
class Menu(models.Model):
burgers = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
beverages = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
extras = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
fries = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
我想让数组中的每个项目都有自己的 name
和 price
字段。
{
"burgers": [
0:{
"name":"Plain patty",
"price":4
},
1:{
"name":"Cheese buns",
"price":8
}
]
}
如何使用 jsonb
实现?
您可以使用 JSONField
[Django-doc] 在模型中存储 JSON:
class Menu(models.Model):
burgers = models.<b>JSONField()</b>
beverages = models.<b>JSONField()</b>
extras = models.<b>JSONField()</b>
fries = models.<b>JSONField()</b>
也就是说,存储 JSON blob 不是一个好主意,尤其是在使用关系数据库时。通常一个人会定义额外的模型,您可以使用 ForeignKey
[Django-doc], ManyToManyField
[Django-doc] 等关系来定义关系。这也确保 参照完整性 以及 结构完整性.
得到保证
我要制作的模型与youtube api模型相似。
{
"videos": [
{
"id": "7lCDEYXw3mM",
"snippet": {
"channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"title": "Google I/O 101: Q&A On Using Google APIs",
"categoryId": "28"
},
"statistics": {
"viewCount": "3057",
"likeCount": "25",
"dislikeCount": "0",
"favoriteCount": "17",
"commentCount": "12"
}
}
]
}
我尝试使用 ArrayField
,但是当我将字段列表发布到数组中时,我一直收到此错误:
"Expected a list of items but got type \"dict\"."
这是目前的模型
class Menu(models.Model):
burgers = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
beverages = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
extras = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
fries = ArrayField(
ArrayField(
models.CharField(max_length=10, blank=True),
size=8,
),
size=8,
default=None
)
我想让数组中的每个项目都有自己的 name
和 price
字段。
{
"burgers": [
0:{
"name":"Plain patty",
"price":4
},
1:{
"name":"Cheese buns",
"price":8
}
]
}
如何使用 jsonb
实现?
您可以使用 JSONField
[Django-doc] 在模型中存储 JSON:
class Menu(models.Model):
burgers = models.<b>JSONField()</b>
beverages = models.<b>JSONField()</b>
extras = models.<b>JSONField()</b>
fries = models.<b>JSONField()</b>
也就是说,存储 JSON blob 不是一个好主意,尤其是在使用关系数据库时。通常一个人会定义额外的模型,您可以使用 ForeignKey
[Django-doc], ManyToManyField
[Django-doc] 等关系来定义关系。这也确保 参照完整性 以及 结构完整性.