как загрузить изображение в django CBV (представления на основе классов) createviews

Я работал над созданием приложения для обмена блогами с помощью Django. Я пытаюсь добавить поле изображения, чтобы пользователи могли загружать изображения и просматривать их как сообщения. Но изображение не загружается. Django даже не выдает ошибок. Код работает нормально, но изображение не загружается.

Я пробовал добавить "enctype" в шаблон, а также внести необходимые изменения в urls.py. Я даже указал MEDIA_ROOT и MEDIA_URL в settings.py. если settings.DEBUG: urlpatterns + = static (settings.MEDIA_URL, document_root = settings.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

изображение не загружается. Заранее спасибо!


person Andrews    schedule 21.10.2019    source источник
comment
Пожалуйста, покажите свой шаблон. Правильно ли вы устанавливаете enctype в элементе формы?   -  person Daniel Roseman    schedule 21.10.2019
comment
‹Div class = content-section› ‹form method = POST encytpe = multipart / form-data› {% csrf_token%} ‹fieldset class = form-group› ‹legend class = border-bottom mb-4› Сообщение в блоге ‹/ legend ›{{Form | crispy}} ‹/fieldset›‹ div class = form-group ›‹ button href = {% url 'project-home'%} class = btn btn-outline-info type = submit ›Post‹ / button ›‹/Div› ‹/form› ‹/div›   -  person Andrews    schedule 22.10.2019
comment
У вас опечатка: encytpe вместо enctype.   -  person Daniel Roseman    schedule 22.10.2019
comment
Поменял ... пока без изменений ...   -  person Andrews    schedule 23.10.2019


Ответы (2)


в элементе формы добавить enctype = multipart / form-data

<form method="post" enctype="multipart/form-data">
    ......
    ......
</form>
person Abi Chhetri    schedule 04.02.2021

я думаю, вам нужно создать форму для модели сообщения и добавить эту форму в представление создания [form_class = PostForm] вместо [model = Post]

person Mahmoud Ahmed    schedule 21.10.2019