Python django模型-非字符串类型存储在CharField中

Python django模型-非字符串类型存储在CharField中,python,django,django-models,django-model-field,Python,Django,Django Models,Django Model Field,我在Python 3上使用Django 1.11,在MySQL 5.7上使用 假设我有一个带有CharField的模型,如下所示: class ModelA(models.Model): ID = models.AutoField(primary_key=True) a = models.CharField() 在贝壳里,我试着这样做: >>> instance = ModelA(a={'1' : 1}) >>> instance 这给了

我在Python 3上使用Django 1.11,在MySQL 5.7上使用

假设我有一个带有CharField的模型,如下所示:

class ModelA(models.Model):

    ID = models.AutoField(primary_key=True)
    a = models.CharField()
在贝壳里,我试着这样做:

>>> instance = ModelA(a={'1' : 1})
>>> instance
这给了我一个TypeError:\uuuu str\uuuuuu返回的非字符串(type dict)

但当我这么做的时候:

>>> instance.save()
我没有得到任何错误

如果我尝试:

>>> instance.a
{'1': 1}
但当我尝试时:

>>> ModelA.objects.get(ID=<the ID of the above instance>).a
"{'1': 1}"
>ModelA.objects.get(ID=).a
"{'1': 1}"
这意味着它作为字符串存储在数据库表中

我的问题是,为什么会发生这种隐式转换,为什么save()不会像_ustr__;()那样引发错误


谢谢你的帮助

模型实例只是一个python对象。可以将任何属性设置为任何值

保存实例时,所有数据都将转换为适当的数据类型,以发挥Django的最佳能力。对于CharField,这意味着任何truthy值(str(value)为True)都保存在数据库中

保存模型时,将读取字段的当前值,并将其转换为适当的数据类型,然后保存到数据库中

TypeError: `__str__` returned non-string (type dict) 
这是因为在转换之前。保存数据后,Django的类型将更改为
str
,因此保存实例后不会出现错误

如果要保存Dict类型的对象并确保使用的是Postgres DB,请使用