出于某种原因,我想检查使用Django创建的Db。我运行命令= python manage.py inspectdb > inspectdb.txt,我可以看到= models.CharField代替预期的= models.FileField,而models.py有正确的models.FileField,在本例中,Db当然也有能够存储Files = .csv的models.FileField。
我的问题--为什么要检查数据库,以不同的方式显示模型字段,如何更多地了解这一点?
发布于 2019-09-04 16:56:46
这是完全合理的,因为在数据库端,FileField是一个varchar。数据库不存储文件的内容。它将文件存储在磁盘(或另一个存储引擎)上的路径存储在数据库中。
因此,在数据库端,根本没有区别,只有Django逻辑才能对其进行不同的处理。如果您稍后分析数据库并将其用于生成Django模型,那么当然不会看到任何不同之处。
因此,inspectdb工具并不是构造数据库的迁移文件(完美的)反面。inspectdb只是做了一些模型,实际上是用数据库端的类型来进行类型检查。但是Django模型在逻辑上比数据库表对应的更“丰富”。通常在运行inspectdb之后,它将需要一些“脚手架”来确保字段进行适当的验证,等等。
发布于 2019-09-04 17:00:41
FileField实例是作为默认最大长度为100个字符的varchar列在数据库中创建的。与其他字段一样,可以使用max_length参数更改最大长度。 请注意,每当您处理上传的文件时,您都应该密切注意上传它们的位置和文件类型,以避免出现安全漏洞。Validate所有上传的文件,这样您就可以确定这些文件是您认为的文件
请查看Django https://docs.djangoproject.com/en/2.2/ref/models/fields/#filefield的文档
https://stackoverflow.com/questions/57792773
复制相似问题