我正在研究一个项目(简单的社交媒体网站)。登录的用户应创建带有文本和图像的帖子。
提交表单时,图像没有上传,并且发生ValueError,并说“图像属性没有与之关联的文件。”
将图像附加到帖子的唯一方法是从管理面板,但这不是我想要的。
我认为views.py中存在问题-我看到了很多帖子,这些都是通过使用基于函数的视图完成的,但是我没有设法找到基于类的视图的解决方案。
我是Django的新手,很可能我缺少一些小东西(或者至少希望如此)。
您可以看看并建议如何进行。任何帮助都感激不尽!
models.py
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(null=True)
image = models.ImageField(upload_to='post_pics/', null=True, blank=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
views.py-用于创建帖子的CBV
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'content', 'image']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
答案 0 :(得分:2)
确保您的表单中具有enctype
<form role="form" method="post" enctype="multipart/form-data">
答案 1 :(得分:0)
图片未上传到数据库。
请不要这样做。
您应牢记一些严重的约束条件:
如果要将静态数据(图像/视频/等)存储到后端存储上的某个文件夹中,则可能需要再安装一台后端服务器,否则可能会遇到问题。该文件夹很可能需要某种文件系统复制来覆盖。
如果将静态数据直接存储到数据库中,则可能更糟。关系数据库不是为处理大量二进制流量而设计的,您确实会很快用完,从而导致性能下降。
推荐的方法是将这种内容直接存储到某些CDN 。一点点实施起来比较困难,但是要中期。透视这是最有效的方法。这将掩盖有效的静态内容交付,良好的缓存,有效的流量分配(流向前端服务器的流量减少==更好的性能),并最终使您的数据库小而快速。