我有一个遗留的MySQL数据库。我决定使用'inspectdb'从数据库表生成模型。我有一些图像存储在表格中的中等字段中。
我看到Django生成了以下字段:
origimage = models.TextField(db_column='OrigImage') # Field name made lowercase.
Django文件说
如果inspectdb无法将列的类型映射到模型字段类型,那么它就是 使用TextField并将插入Python注释'此字段类型是一个 猜测。'在生成的模型中的字段旁边。
我没有看到'此字段类型是猜测'。似乎没有像Django那样对待这个猜测。 Django是否将mediumblob翻译为TextField?我需要在Forms中将其视为文件上载字段。我是否要将其更改为ImageField以使字段正确呈现?
此外,在数据库列中存储图像的正确dhango数据类型是什么?
由于
答案 0 :(得分:2)
它按设计工作。 Django的内省可以节省你很多时间,但它只能做很多事情,而且它也会在生成的模型文件中说明,你必须做一些手动清理。
以下是来自django源代码的the mysql introspection class存在的一些映射:
data_types_reverse = {
FIELD_TYPE.BLOB: 'TextField',
FIELD_TYPE.CHAR: 'CharField',
...
FIELD_TYPE.TINY_BLOB: 'TextField',
FIELD_TYPE.MEDIUM_BLOB: 'TextField',
FIELD_TYPE.LONG_BLOB: 'TextField',
FIELD_TYPE.VAR_STRING: 'CharField',
}
请注意,没有任何映射到FileField,因为内省不可能知道您使用该blob字段的具体内容。
如果要将图像内容存储在数据库字段本身中,那么在任何情况下迁移到FileField并拥有该文件的Django manage the storage可能不是一个坏主意。