Django-inspectdb-“ models.FileField”显示为“ models.CharField”

时间:2019-09-04 16:50:39

标签: python django inspectdb

由于某种原因,我想检查Django创建的Db。我运行命令= python manage.py inspectdb > inspectdb.txt 我看到= models.CharField代替了预期的models.FileField,而models.py具有正确的models.FileField,而且Db当然也有models.FileField能够存储文件= .csv,在这种情况下正确。

我的问题-为什么inspectdb会以不同的方式显示模型字段,如何进一步了解这一点?

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

2 个答案:

答案 0 :(得分:1)

这很有意义,因为在数据库方面,FileFieldvarchar。数据库不会存储文件的内容。它将文件存储在磁盘(或其他存储引擎)上的路径存储在数据库中。

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

因此,inspectdb工具不是构成数据库的迁移文件的(完全)逆函数。 inspectdb只是通过数据库端的类型进行确实类型检查的模型。但是,就逻辑而言,Django模型比数据库表对应模型更“丰富”。通常在运行inspectdb之后,将需要一些“脚手架”以确保字段进行正确的验证,等等。

答案 1 :(得分:1)

  

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

     

请注意,每当您处理上传的文件时,都应密切注意上传文件的位置以及文件的类型,以避免安全漏洞。 Validate所有上传的文件,以确保文件符合您的想法

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