如何使用 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
    )

我想让数组中的每个项目都有自己的 nameprice 字段。

{
   "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] 等关系来定义关系。这也确保 参照完整性 以及 结构完整性.

得到保证