如何在 django CBV(基于类的视图)中创建视图中上传图像



我一直在使用Django创建一个博客共享应用程序,我正在尝试添加一个图像字段,以便用户能够上传图像并将其作为帖子查看。但是图像没有上传。Django 甚至没有抛出任何错误。代码运行良好,但图像未上传。

我尝试在模板中添加"enctype",并在 urls.py 中进行必要的更改。我什至在 settings.py 中指定了MEDIA_ROOT和MEDIA_URL。 如果设置。调试: 网址模式 += 静态(设置。MEDIA_URL,document_root=设置。MEDIA_ROOT(我已经在我的 urls.py 中添加了这个。

我的 models.py

from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse

class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, 
on_delete=models.CASCADE,related_name='% 
(app_label)s_%(class)s_related')
picture = 
models.ImageField(upload_to='images',default='default.png',null=True)
def __str__(self):
return self.title 
def get_absolute_url(self):
return reverse('project-home')

我的 Views.py

class PostCreateView(SuccessMessageMixin,LoginRequiredMixin,CreateView):
model = Post
fields = ['title','content','picture']
success_message = 'Your submission is sucessful!'
def form_valid(self,form):
form.instance.author = self.request.user
return super().form_valid(form)
def get_success_message(self):
return self.success_message

图片未上传。提前感谢!

在表单元素中添加 enctype="multipart/form-data">

<form method="post" enctype="multipart/form-data">
......
......
</form>

我认为您需要为帖子模型创建一个表单,并将此表单添加到创建视图中[form_class =PostForm]而不是[模型=Post]

如果您使用的是基于类的视图,则可以执行以下操作

class PostCreateView(CreateView):
model = Post
form_class = PostForm
template_name = 'post_create.html'
success_url = reverse_lazy('post-list')

最新更新