由于某种原因,我想检查Django创建的Db。我运行命令= python manage.py inspectdb > inspectdb.txt
我看到= models.CharField
代替了预期的models.FileField
,而models.py具有正确的models.FileField
,而且Db当然也有models.FileField
能够存储文件= .csv,在这种情况下正确。
我的问题-为什么inspectdb会以不同的方式显示模型字段,如何进一步了解这一点?
答案 0 :(得分:1)
这很有意义,因为在数据库方面,FileField
是varchar
。数据库不会不存储文件的内容。它将文件存储在磁盘(或其他存储引擎)上的路径存储在数据库中。
因此在数据库方面根本没有区别,只有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的文档