【问题标题】:Django inspectdb generates TextField for MySQL mediumblobDjango inspectdb 为 MySQL mediumblob 生成 TextField
【发布时间】:2018-02-12 03:26:41
【问题描述】:

我有一个旧版 MySQL 数据库。我决定使用“inspectdb”从数据库表中生成模型。我有一些图像存储为表中的 mediumblob 字段。

我看到 Django 生成的字段如下:

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

Django 文档说

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

我没有看到“此字段类型是猜测”。看起来不像 Django 将其视为猜测。 Django 是否将 mediumblob 翻译为 TextField?我需要将此视为表单中的文件上传字段。我是否要将其更改为 ImageField 以便正确呈现该字段?

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

谢谢

【问题讨论】:

    标签: python mysql django


    【解决方案1】:

    它按设计工作。 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 文件都可能不是一个坏主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多