我正在Django中建立CMS平台。我想创建EDIT Post方法,以便任何人都可以编辑其帖子。主要问题是ImageField。由于Django的Models.py中必须使用ImageField。因此,在为用户创建Edit Post方法ImageField时,在创建帖子时上传的图片为空。
该图像在Post模型(数据库)中可用,但未显示在EDIT Post Page上。除了图像外,其他所有字段都是可编辑且可见的。
这是“编辑帖子视图”
def updatePost(request,pk):
getEditPost= get_object_or_404(Post,pk=pk)
if request.method=="POST":
form = CkEditorForm(request.POST,request.FILES,instance=getEditPost)
try:
if form.is_valid():
form.save()
except Exception as e:
print(e)
else:
form = CkEditorForm(instance=getEditPost)
context= {
'myForm':form,
'post':getEditPost,
}
return render(request,"post/editPost.html",context)
这是我的表格。py
class CkEditorForm(ModelForm):
.....
.....
featuredImage = forms.ImageField(required=True)
我的模型。py
class Post(models.Model):
.....
.....
featuredImage = models.ImageField(upload_to="featured_image/")
答案 0 :(得分:0)
您是否已在settings.py文件中添加了MEDIA_URL和MEDIA_ROOT
答案 1 :(得分:0)
我不确定是否有任何方法可以从后端加载图像字段中的图像。但是您可以简单地在编辑页面上查看图像,以便用户了解之前上传的是哪个图像。 (在编辑页面将图像字段留空不会影响数据库中的图像字段。)
执行这些更改以在编辑页面上加载图像:
views.py
# Create your views here.
def updatePost(request,pk):
getEditPost= get_object_or_404(Post,pk=pk)
if request.method=="POST":
form = CkEditorForm(request.POST,request.FILES,instance=getEditPost)
try:
if form.is_valid():
form.save()
except Exception as e:
print(e)
else:
form = CkEditorForm(instance=getEditPost)
context= {
'myForm':form,
'post':getEditPost,
# add this line
'feature_image': getEditPost.featuredImage,
}
return render(request,"post/editPost.html",context)
editPost.html
...
<!-- Before closing the blody tag -->
<script>
let image_field = document.getElementById('id_featuredImage') // form > image field
let load_image = document.createElement('img')
// Add media root before image link, in this case I'm adding /media/
load_image.setAttribute('src', "/media/{{feature_image}}")
load_image.setAttribute('alt', "Feature image")
image_field.parentNode.insertBefore(load_image, image_field.nextSibling)
</script>