Ian*_*nSR 10 django validation upload
有人能够确切地说明上传文件实际写入FileField中"upload_to"返回的位置的时间,特别是关于字段,模型,表单验证和清理的顺序吗?
现在我在我的模型上有一个"干净"的方法,它假设上传的文件就位,所以它可以对它进行一些验证.看起来该文件尚未保存,可能只是保存在临时位置或内存中.如果是这种情况,如果我需要执行一些外部进程/程序来验证文件,如何"打开"它或找到它的路径?
谢谢,
伊恩
表单清理与实际保存文件或保存任何其他数据无关.在运行模型实例的save()方法之前,不会保存文件(请注意,如果使用ModelName.objects.create(),则会自动调用此save()方法).
绑定表单将包含一个打开的File对象,因此您应该能够直接对该对象进行任何验证.例如:
form = MyForm(request.POST, request.FILES)
if form.is_valid():
file_object = form.cleaned_data['myFile']
#run any validation on the file_object, or define a clean_myFile() method
# that will be run automatically when you call form.is_valid()
model_inst = MyModel('my_file' = file_object,
#assign other attributes here....
)
model_inst.save() #file is saved to disk here
Run Code Online (Sandbox Code Playgroud)
你需要做什么?如果您的验证在没有临时文件的情况下也能工作,您可以通过调用read()您的文件字段返回的内容来访问数据。
def clean_field(self):
_file = self.cleaned_data.get('filefield')
contents = _file.read()
Run Code Online (Sandbox Code Playgroud)
如果您确实需要在磁盘上使用它,您就知道从这里开始 :) 将它写入一个临时位置并对其进行一些魔术!