@PcheI1

Не сохраняется картинка из формы Django. В чем проблема?

Есть приложение-блог и есть форма,
class NewPostForm(forms.ModelForm):
    class Meta(object):
        model = Post
        fields = ("title", "content", "image")
        labels = {
            "content": "Text"
        }

        widgets = {
            "title": Textarea(attrs={"rows": 2, "cols": 55}),
            "content": Textarea(attrs={"rows": 30, "cols": 55})
        }
созданная по модели
class Post(models.Model):

    title = models.CharField(null=None, max_length=100)
    content = models.CharField(null=None, blank=True, max_length=5000, default=" ")
    created_at = models.DateTimeField(auto_now_add=True)
    visible = models.BooleanField(default=True)
    author = models.CharField(max_length=100, null=False, default="test")
    image = models.ImageField(upload_to="blog", null=True, blank=True)

    def get_absolute_url(self):
        return reverse_lazy("blog:update-post", kwargs={"pk": self.pk})

    def __str__(self):
        visible = "\N{FIRE}" if self.visible else "\N{SLEEPING SYMBOL}"
        msg = f'[{self.pk}] "{self.title}" {visible}'
        return msg

    class Meta:
        ordering = ["-created_at", "title", "pk"]
Суть очень проста и заключается в том что данные из формы записываются в БД и оттуда попадают на главную страницу, но я где то видимо ошибся и картинка сохраняется только через админку.

Код View
class NewPostView(LoginRequiredMixin, CreateView):

    form_class = NewPostForm
    template_name = "blog/post_form.html"
    success_url = reverse_lazy("blog:index")
    extra_context = {
        "action_name": "Create Post",
        "action_url": reverse_lazy("blog:new-post"),
    }

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.author = self.request.user
        instance.save()
        return redirect(self.success_url)
  • Вопрос задан
  • 321 просмотр
Решения вопроса 1
@PcheI1 Автор вопроса
Разобрался сам, ошибка была в htmlе. Если кому нибудь это понадобится то в теге form надо указать атрибут enctype=multipart/form-data
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы