相关疑难解决方法(0)

如何将多个文件上传到模型字段?

我想通过ModelForm上传多个文件,所有文件都分配给fileModel的一个字段.我已经浏览了文档,我看到了一个例子,我在这里实现了但是我只能将我的表单转到选择多个文件,但只保存一个并分配给filesfield.Below是我的代码

models.py

class Feed(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE,related_name='feeds')
    text=models.TextField(blank=False,max_length=500)
    files = models.FileField(upload_to="files/%Y/%m/%d")
Run Code Online (Sandbox Code Playgroud)

forms.py

class FeedForm(ModelForm):
    class Meta:
        model=Feed
        fields=('text','auth','files')
        widgets={"files":forms.FileInput(attrs={'id':'files','required':True,'multiple':True})}
Run Code Online (Sandbox Code Playgroud)

和views.py

def post_feed(request):
    form_class = FeedForm
    if request.method == 'POST':
        form = form_class(request.POST,request.FILES)
        if form.is_valid():
            feed = form.save(commit=False)
            feed.user = User.objects.get(pk=1)
            feed.pub_date=timezone.now()
            #instance = Feed(files=request.FILES['files'])
           # feed.files=request.FILES['files']
            feed.save()
            return redirect('home')
    else:
        form = form_class()
        return render(request, 'post_feed.html', {'form': form,})

from django.views.generic.edit import FormView
from .forms import FeedForm

class FileFieldView(FormView):
    form_class=FeedForm
    template_name='post_feed.html'
 '''success_url=???   #I dont know what to write here.I …
Run Code Online (Sandbox Code Playgroud)

django

10
推荐指数
3
解决办法
6440
查看次数

使用动态路径将文件上传到 Django

我正在尝试上传文件并组织媒体文件夹中的目录结构。具体来说,我希望上传根据模型中的值之一创建子文件夹。我面临的问题是,在视图中我向实例添加信息(在我的示例代码中这是相关的profile)。我想将此信息用于子文件夹,但在上传后保存之前,它不存在于我的模型中...

将信息放入Upload以便创建子文件夹的适当方法是什么?

谢谢

模型:

class Upload(models.Model):
    file = models.FileField(upload_to="upload/")
    profile = models.ForeignKey(Profile, blank=True, null=True)

    def get_upload_to(self, field_attname):
        return 'upload/%d' % self.profile
Run Code Online (Sandbox Code Playgroud)

看法:

def profile(request, profile_slug):
    profile = Profile.objects.get(slug=profile_slug)
    context_dict['profile'] = profile
    if request.method=="POST":
            for file in request.FILES.getlist('file'):
                    upload = UploadForm(request.POST, request.FILES)
                    if upload.is_valid():
                            newupload = upload.save(commit=False)
                            newupload.profile = profile
                            newupload.save()
    else:
        pass

    upload=UploadForm()
    context_dict['form'] = upload

    return render(request, 'app/profile.html', context_dict)
Run Code Online (Sandbox Code Playgroud)

解决方案,感谢 xyres:

模型:

def get_upload_to(instance, filename):
    return 'upload/%s/%s' % (instance.profile, filename)

class Upload(models.Model):
    file = models.FileField(upload_to=get_upload_to) …
Run Code Online (Sandbox Code Playgroud)

django upload

0
推荐指数
1
解决办法
4083
查看次数

标签 统计

django ×2

upload ×1