我在 Python 3 和 MySQL 5.7 上使用 Django 1.11。
假设我有一个带有 CharField 的模型,如下所示:
class ModelA(models.Model):
ID = models.AutoField(primary_key=True)
a = models.CharField()
在外壳中,我尝试这样做:
>>> instance = ModelA(a={'1' : 1})
>>> instance
这给了我一个 TypeError: __str__ returned non-string (type dict)
但是当我这样做时:
>>> instance.save()
我没有收到任何错误。
如果我尝试:
>>> instance.a
{'1': 1}
但是当我尝试时:
>>> ModelA.objects.get(ID=<the ID of the above instance>).a
"{'1': 1}"
这意味着它作为字符串存储在数据库表中。
我的问题是为什么会发生这种隐式转换,为什么 save() 不会像 __str__() 那样引发错误?
谢谢你的帮助!