Django Json字段查询

时间:2018-12-18 20:30:41

标签: django

我的模型中有一个JSONField,它存储以下类型的数据。

[
   {
      "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"
   }
]

我尝试了django文档的示例。但仍然返回Null

我尝试过使用SampleCategory.objects.filter(books__name = 'Name A')

1 个答案:

答案 0 :(得分:0)

根据文档,在定义json数据时可以使用book__name

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)

并将其用作SampleCategory的FK:

class SampleCategory(models.Model):
    books = models.ForeignKey(Book)

然后,您可以像给定问题一样查询(例如SampleCategory.objects.filter(books__name = 'Name A'))。希望对您有所帮助。