JSONField

官網介紹

  • 用於存儲JSON格式數據的字段。在Python中,數據以其Python本機格式表示:字典,列表,字符串,數字,布爾值和None。
  • 一個可選的JSON格式類序列化的數據類型不是由標准JSON序列(支持的datetime,uuid等)。例如,您可以使用 DjangoJSONEncoder該類或任何其他json.JSONEncoder子類。

JSONField使用

  • 官網是按照PostgreSQL為示例,這里用的是MySQL,其實除了引用不一樣,別的用法都是相同的。
  • 示例
1
2
3
4
5
6
7
8
9
from django_mysql.models import JSONField
from django.db import models

class Dog(models.Model):
name = models.CharField(max_length=200)
data = JSONField()

def __str__(self):
return self.name

JSONField的查詢

  • 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> Dog.objects.create(name='Rufus', data={
... 'breed': 'labrador',
... 'owner': {
... 'name': 'Bob',
... 'other_pets': [{
... 'name': 'Fishy',
... }],
... },
... })
>>> Dog.objects.create(name='Meg', data={'breed': 'collie'})

>>> Dog.objects.filter(data__breed='collie')
<QuerySet [<Dog: Meg>]>
  • 可以將多個鍵鏈接在一起以形成路徑查找
1
2
>>> Dog.objects.filter(data__owner__name='Bob')
<QuerySet [<Dog: Rufus>]>
  • 如果鍵是整數,它將被解釋為數組中的索引查找
1
2
>>> Dog.objects.filter(data__owner__other_pets__0__name='Fishy')
<QuerySet [<Dog: Rufus>]>