1

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

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

链接问题 - https://stackoverflow.com/a/48739612/4928635

4

2 回答 2

1

这是完全有道理的,因为FileField在数据库端 a 是 a varchar。数据库不存储文件的内容。它将文件存储在磁盘(或另一个存储引擎)上的路径存储在数据库中。

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

因此,该inspectdb工具不是构建数据库的迁移文件的(完美)逆。inspectdb只是使模型确实与数据库端的类型进行类型检查。但是 Django 模型因此在逻辑方面比数据库表对应物更“丰富”。通常在运行后inspectdb需要一些“脚手架”来确保字段进行正确的验证等。

于 2019-09-04T16:56:46.077 回答
1

FileField实例在您的数据库中创建为varchar默认最大长度为 100 个字符的列。与其他字段一样,您可以使用 max_length 参数更改最大长度。

请注意,无论何时处理上传的文件,都应密切注意上传文件的位置以及文件的类型,以避免出现安全漏洞。Validate所有上传的文件,以便您确定文件是您认为的文件

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

于 2019-09-04T17:00:41.837 回答