【发布时间】:2021-01-24 11:26:31
【问题描述】:
这可能是一个非常愚蠢的问题。我也是 django 的新手。但我试图用 django 创建一个基本的文件上传方法,用户上传一个文件并将其存储到定义的媒体路径(或任何它所称的)中,并且文件大小、名称和其他一些需要的属性可以存储到数据库中。所以我已经准备好了模型,它可以帮助你更好地理解这个问题。
class Document(models.Model):
file_uid = models.CharField(max_length = 16)
file_name = models.CharField(max_length = 255)
file_size = models.CharField(max_length = 255)
file_document = models.FileField(upload_to='uploaded_files/')
uploaded_on = models.DateTimeField(auto_now_add=True)
uploaded_by = models.CharField(max_length=16)
现在很明显,我们不需要在表单中创建所有字段,并且大多数字段都可以从文件本身接收(如名称、大小)。对于其他属性,如 uid 和由这些上传的也将由后端添加。所以这就是我卡住的地方。我已经连续搜索了 2 天,仍然找不到合适的解决方案。
到目前为止,这是我的views.py
def uploadView(request):
if(request.method == 'POST'):
form = FileUploadForm(request.POST, request.FILES)
uploaded_file = request.FILES['uploaded_file']
file_dict = {
'file_uid' : get_random_string(length=10),
'file_name' :uploaded_file.name,
'file_size' : uploaded_file.size,
'file_document' : request.FILES['uploaded_file'],
'uploaded_by' : get_random_string(length=10)
}
form = FileUploadForm(data=file_dict)
if form.is_valid():
form.save()
return HttpResponse("You reached here")
else:
return HttpResponse("Your form is invalid")
else:
form = FileUploadForm(request.POST, request.FILES)
return render(request, 'function/upload.html', {
'form':form
})
我不知道这是否正确,但据我所知 form.isvalid() 是错误的。
这是我的 forms.py
class FileUploadForm(forms.ModelForm):
file_document = forms.FileField(widget=forms.FileInput(attrs={'name':'uploaded_file'}))
class Meta:
model = Document
fields = ('file_uid', 'file_name', 'file_size', 'file_document', 'uploaded_by')
我的上传页面部分看起来像这样
<body>
<h1>Upload a file</h1>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="uploaded_file">
<button type="submit">Upload</button>
</form>
</body>
如果您能仁慈地指导我采取正确的做法,我将不胜感激。
【问题讨论】:
标签: django django-models django-views django-forms