Django - inspectdb - "models.FileField" 显示为 "models.CharField"

Django - inspectdb - the "models.FileField" are displayed as "models.CharField"

出于某种原因,我想检查使用 Django 创建的 Db。我 运行 命令 = python manage.py inspectdb > inspectdb.txt 我看到 = models.CharField 代替了预期的 = models.FileField ,而 models.py 有正确的 models.FileField 而且 Db 肯定有一个 models.FileField 作为我能够正确存储 Files = .csv ,在这种情况下。

我的问题 - 为什么 inspectdb 会以不同方式显示模型字段,如何了解更多相关信息?

相关问题 -

这很有道理,因为 FileField 在数据库端是 varchar。数据库 存储文件的内容。它在数据库中存储文件在磁盘(或其他存储引擎)上的存储路径。

在数据库端,因此根本没有区别,只是 Django logic 处理方式不同。如果您稍后分析数据库并打算从中生成 Django 模型,那么它当然不会以任何方式看到差异。

因此,inspectdb 工具不是构建数据库的迁移文件的(完美)逆向。 inspectdb 只是制作确实与数据库端的类型进行类型检查的模型。但是 Django 模型在逻辑方面比数据库 table 更 "rich"。通常在 运行 inspectdb 之后需要一些 "scaffolding" 来确保字段进行正确的验证等

FileField instances are created in your database as varchar columns with a default max length of 100 characters. As with other fields, you can change the maximum length using the max_length argument.

Note that whenever you deal with uploaded files, you should pay close attention to where you’re uploading them and what type of files they are, to avoid security holes. Validate all uploaded files so that you’re sure the files are what you think they are

请查看 Django 文档 https://docs.djangoproject.com/en/2.2/ref/models/fields/#filefield