Django modelfrom 上传文件时保存文件各属性,大小,类型等
时间: 2024-04-13 11:30:55 浏览: 252
在Django中,你可以使用模型表单(ModelForm)来上传文件并保存文件的各个属性,如大小、类型等。首先,你需要创建一个模型来存储文件的属性。例如,以下是一个示例模型:
```python
from django.db import models
class UploadedFile(models.Model):
file = models.FileField(upload_to='uploads/')
name = models.CharField(max_length=255)
size = models.IntegerField()
type = models.CharField(max_length=255)
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
```
在这个示例中,我们定义了一个名为`UploadedFile`的模型,它具有一个`file`字段用于存储上传的文件,以及其他用于存储文件属性的字段(如`name`、`size`、`type`和`uploaded_at`)。
接下来,你需要创建一个模型表单来处理文件上传。你可以使用Django提供的`ModelForm`来自动生成表单。以下是一个示例:
```python
from django import forms
from .models import UploadedFile
class UploadFileForm(forms.ModelForm):
class Meta:
model = UploadedFile
fields = ['file']
```
在这个示例中,我们创建了一个名为`UploadFileForm`的模型表单,它使用了我们之前定义的`UploadedFile`模型,并且只包含了`file`字段。
最后,在视图函数中处理文件上传并保存文件属性。以下是一个示例视图函数:
```python
from django.shortcuts import render
from .forms import UploadFileForm
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
uploaded_file = form.save(commit=False)
uploaded_file.name = uploaded_file.file.name
uploaded_file.size = uploaded_file.file.size
uploaded_file.type = uploaded_file.file.content_type
uploaded_file.save()
return render(request, 'success.html')
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
```
在这个示例中,我们首先检查请求的方法是否为POST,并使用`UploadFileForm`实例化一个表单对象。然后,我们通过调用`is_valid()`来验证表单数据是否有效。如果验证通过,我们将表单对象保存到数据库中,并设置文件的各个属性(如名称、大小和类型)。最后,我们返回一个成功页面。
请注意,上述代码中的模板文件(如`upload.html`和`success.html`)需要自行创建。
这样,当你在前端页面中使用该表单上传文件时,文件的各个属性将被保存到数据库中。
阅读全文