在Django ImageField的错误目录中上传图像

时间:2019-06-04 11:56:23

标签: python django django-2.2 django-uploads

当我上传照片时,照片已成功加载, 但照片放置在错误的目录中。

将图像放置在<nav *navItems> <ng-container *ngTemplateOutlet="customHeader"></ng-container> <ng-container *ngFor="let bc of bcases"> // Some other stuff.. </ng-container> </nav> 路径上,而不是像我在Post模型中概述的那样将图像放置到'media/posts-pics/'的路径上。

这些是我的文件:

  

models.py

'media'
  

Project.urls.py

class Post(models.Model): 
    index_pic = models.ImageField(upload_to='posts-pics/')
  

views.py

if settings.DEBUG: 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

我为def add_post(request): if request.method == "POST": form = AddPostForm(request.POST, request.FILES) if form.is_valid(): new_post = form.save(commit=False) new_post.index_pic = form.cleaned_data['index_pic'] new_post.save() return redirect('view_post') else: form = AddPostForm() template = 'post/add_edit_post.html' context = {'form': form} return render(request, template, context) def edit_post(request, slug): post = get_object_or_404(Post, slug=slug) if request.method == "POST": form = AddPostForm(request.POST, request.FILES, instance=post) if form.is_valid(): Post.objects.filter(id=post.id).update(title=request.POST['title'], index_pic=form.cleaned_data['index_pic'], ) return redirect('view_post') else: form = AddPostForm(instance=post) template = 'post/add_edit_post.html' context = {'form': form} return render(request, template, context) 使用了完全相同的代码,照片就在该位置,但在add_post中遇到了麻烦。 怎么了?

注意:

  

从技术上讲,我可以删除edit_post,但这可以通过   特殊用途,目的是:每个应用程序都有其文件夹,用于   保存图像。

1 个答案:

答案 0 :(得分:1)

问题在于您没有正确使用ModelForm

在edit_post视图中,您要替换为:

Post.objects.filter(id=post.id).update(
    title=request.POST['title'],                                                   
    index_pic=form.cleaned_data['index_pic'],
    )

简单明了:

 form.save()

这将负责更新通过form.instance传递的帖子(使用经过清理的数据,而当前代码则不是这种情况)

FWIW,在您的add_post视图中,您也想替换

        new_post = form.save(commit=False)
        new_post.index_pic = form.cleaned_data['index_pic']
        new_post.save()

简单明了:

        new_post = form.save()

再次,ModelForms的全部要点是他们知道如何创建和更新模型实例。