2

当我上传照片时,照片加载成功,但是照片放错了目录。

'media/posts-pics/'正如我在 Post 模型中所概述的那样,它不是将图像放置在路径上,而是放置在'media'路径上。

这些是我的文件:

模型.py

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

项目.urls.py

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

视图.py

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怎么了 ?

注意:

从技术上讲,我可以删除'media/post-pics',但这是出于特殊目的,目的是:每个应用程序都有其用于保存图像的文件夹。

4

1 回答 1

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 的全部意义在于它们知道如何创建和更新模型实例。

于 2019-06-04T13:04:15.957 回答