@Cyber_bober

Как исправить добавление изображений через форму?

Привет, у меня имеются две формы - «Создание» и «Редактирование». В форме создания прикрепление изображения происходит, а в форме редактирования нет, при этом фрэймворк не выдает никаких ошибок.
Подскажите пожалуйста, где копать? Может есть какие-то тонкости в работе с изображениями, о которых я не знаю?

Листинг формы создания
def post_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            farm = form.save(commit=False)
            farm.owner = request.user
            farm.published_date = timezone.now()
            farm.save()
            return redirect('blog.views.post_detail', id=post.id)
        else:
            post = PostForm()
            return render(request, 'posts/post_edit.html', {'form': form})


Листинг формы редактирования
def post_edit_main(request, id):
    post = get_object_or_404(Post, id=id)
    if request.method == "POST":
        form = PostEditMain(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.owner = request.user
            post.published_date = timezone.now()
            post.save()
            return redirect('post.views.own_farm_detail', id=farm.id)
    else:
        form = PostEditMain(instance=farm)
    return render(request, 'posts/post_edit_main.html', {'form': form})


Модель
class Post(models.Model):
owner = models.ForeignKey('auth.User')
title = models.CharField(max_length=100,verbose_name=u'Название')
image = models.ImageField(upload_to="{{ MEDIA_ROOT }}",
verbose_name=u'Заглавное фото', help_text='Большое', blank=True, null=True)

Шаблон

<form method="POST" class="post-form">{% csrf_token %}
            {{ form|bootstrap}}
            <button type="submit" class="save send">Save</button>
        </form>


Я было грешил на CHMOD но при создании изображение прикрепляется, а вот при редактировании - нет(
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий

  1. post = get_object_or_404(Post, id=id)
    но
    form = PostEditMain(request.POST, instance=farm)


  2. В шаблоне добавьте объявлению формы параметр enctype="multipart/form-data"


  3. request.FILES в параметры формы всё-таки добавьте.


  4. upload_to равен MEDIA_ROOT по умолчанию, можно не указывать. А конструкция upload_to="{{ MEDIA_ROOT }}" - это гарантированная проблема.

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitryVoronkov
@DmitryVoronkov
Python Developer
PostEditMain(request.POST, request.FILES, instance=farm)
Ответ написан
Ваш ответ на вопрос

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

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