django上传多个文件然后保存到数据库的路径

时间:2016-09-24 06:38:24

标签: python django database

我想使用表单上传多个图像文件,然后将图像保存在./static/中,然后将图像的路径保存到数据库,当我使用request.FIELS.getlist("files")时,使用save(),数据库中只保存了一个图像的名称,并且真实图像未保存在./static/

models.py

class User(models.Model):
    username = models.CharField(max_length=200)
    headImg = models.FileField(upload_to='./upload/')
    is_excuted = models.BooleanField(default=False)
    time = models.DateField(default=timezone.now)
    score = models.DecimalField(max_digits=2, decimal_places=2, default=0.00)

view.py

class UserForm(forms.Form):
    username = forms.CharField()

def register(request):
    if request.method == "POST":
        uf = UserForm(request.POST, request.FILES)
        if uf.is_valid():
            username = uf.cleaned_data['username']
            for f in request.FILES.getlist("files"):
                user = User()
                user.username = username
                user.headImg = f.name
                user.save()
            return HttpResponse('upload ok!')
    else:
        uf = UserForm()
    return render_to_response('register.html',{'uf':uf})

1 个答案:

答案 0 :(得分:0)

您可以使用git中的django-multiupload复制示例。

# forms.py
from django import forms
from multiupload.fields import MultiFileField

class UploadForm(forms.Form):
    attachments = MultiFileField(min_num=1, max_num=3, max_file_size=1024*1024*5)

    # If you need to upload media files, you can use this:
    attachments = MultiMediaField(
        min_num=1, 
        max_num=3, 
        max_file_size=1024*1024*5, 
        media_type='video'  # 'audio', 'video' or 'image'
    )

    # For images (requires Pillow for validation):
    attachments = MultiImageField(min_num=1, max_num=3, max_file_size=1024*1024*5)


# models.py
from django.db import models

class Attachment(models.Model):
    file = models.FileField(upload_to='attachments')

# views.py
from django.views.generic.edit import FormView
from .forms import UploadForm
from .models import Attachment

class UploadView(FormView):
    template_name = 'form.html'
    form_class = UploadForm
    success_url = '/done/'

    def form_valid(self, form):
        for each in form.cleaned_data['attachments']:
            Attachment.objects.create(file=each)
        return super(UploadView, self).form_valid(form)
相关问题