图像未上传到数据库。 ValueError。 'image'属性没有与之关联的文件

时间:2019-04-25 18:49:09

标签: python django python-3.x django-models

我正在研究一个项目(简单的社交媒体网站)。登录的用户应创建带有文本和图像的帖子。

提交表单时,图像没有上传,并且发生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)

2 个答案:

答案 0 :(得分:2)

确保您的表单中具有enctype

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

答案 1 :(得分:0)

  

图片未上传到数据库。

请不要这样做。
您应牢记一些严重的约束条件:

如果要将静态数据(图像/视频/等)存储到后端存储上的某个文件夹中,则可能需要再安装一台后端服务器,否则可能会遇到问题。该文件夹很可能需要某种文件系统复制来覆盖。

如果将静态数据直接存储到数据库中,则可能更糟。关系数据库不是为处理大量二进制流量而设计的,您确实会很快用完,从而导致性能下降。

推荐的方法是将这种内容直接存储到某些CDN 。一点点实施起来比较困难,但是要中期。透视这是最有效的方法。这将掩盖有效的静态内容交付,良好的缓存,有效的流量分配(流向前端服务器的流量减少==更好的性能),并最终使您的数据库小而快速。