Django inspectdb为MySQL mediumblob生成TextField

时间:2018-02-12 03:26:42

标签: python mysql django

我有一个遗留的MySQL数据库。我决定使用'inspectdb'从数据库表生成模型。我有一些图像存储在表格中的中等字段中。

我看到Django生成了以下字段:

origimage = models.TextField(db_column='OrigImage')  # Field name made lowercase.

Django文件说

  

如果inspectdb无法将列的类型映射到模型字段类型,那么它就是   使用TextField并将插入Python注释'此字段类型是一个   猜测。'在生成的模型中的字段旁边。

我没有看到'此字段类型是猜测'。似乎没有像Django那样对待这个猜测。 Django是否将mediumblob翻译为TextField?我需要在Forms中将其视为文件上载字段。我是否要将其更改为ImageField以使字段正确呈现?

此外,在数据库列中存储图像的正确dhango数据类型是什么?

由于

1 个答案:

答案 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可能不是一个坏主意。