【发布时间】:2014-02-21 14:34:50
【问题描述】:
在 Django 中存储字典的最佳方式是什么。是否有一种将整个 JSON 推送到字段中的本地方式,或者我应该尝试使用其他东西......人们推荐什么。我想尽可能保持标准的 Django。
【问题讨论】:
-
顺便说一下我用的是 MySQL
-
如果您对其中一个答案感到满意,请接受并投票。另外,你应该对你的“gold question”做同样的事情
在 Django 中存储字典的最佳方式是什么。是否有一种将整个 JSON 推送到字段中的本地方式,或者我应该尝试使用其他东西......人们推荐什么。我想尽可能保持标准的 Django。
【问题讨论】:
如果您使用的是 PostgreSQL,可以查看django-hstore
class Something(models.Model):
name = models.CharField(max_length=32)
data = hstore.DictionaryField() # can pass attributes like null, blank, ecc.
instance = Something.objects.create(name='something', data={'a': '1', 'b': '2'})
assert instance.data['a'] == '1'
【讨论】:
目前没有用于 MySQL 的特殊 JSON 数据类型。在我的一项工作中,我们使用了一个普通的文本/blob 字段。在将其写入数据库之前,我们对其进行压缩:
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'
当我们需要展示它时(如果你需要展示它?),我们会打印出来:
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,
... indent=4, separators=(',', ': '))
{
"4": 5,
"6": 7
}
这些 sn-ps 来自official documentation。
【讨论】:
blob 通常用于图像、二进制文件等。
有几个包支持模型上的 JSON 字段:https://www.djangopackages.com/grids/g/json-fields/
还有一个特定于 MySQL 的:https://django-mysql.readthedocs.org/en/latest/model_fields/json_field.html
【讨论】: