Home > front end >  Cant upload Image with CreatView Django
Cant upload Image with CreatView Django

Time:11-18

views.py

class PostCreatView(LoginRequiredMixin, CreateView): 
   model = Posts
   fields = ['image', 'caption']
   template_name = 'home/creat-post.html'
   success_url = '/home/'

   def form_valid(self,form):
      form.instance.user = self.request.user
      return super().form_valid(form)

models.py

    class Posts(models.Model):
   caption = models.CharField(max_length=2200)
   date_posted = models.DateTimeField(default=timezone.now())
   image = models.ImageField( upload_to='PostsImages')
   user = ForeignKey(User,  on_delete=models.CASCADE ,related_name='UserPosts')

   def __str__(self):
      return f"Post {self.id} ({self.user.username})'s"

   def save(self, *args, **kwargs):
      super().save(*args, **kwargs)
      img = Image.open(self.image.path)
      #img = make_square(img, 1080, 1080)
      img.save(self.image.path) 

   class Meta:
      ordering = ['-date_posted']

creat-post.html

{% extends "home/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
   <div>
      <form method="POST">
         <fieldset>
            <legend >Creat Post</legend>
            {% csrf_token %}
            {{ form|crispy }}
         </fieldset>
         <button class="btn btn-primary" type="submit">Post</button>
      </form>

   </div>
{% endblock %}

So I created a creatview to add create new post. However when I go to the link and add photo then hit submit, it gives me as I haven't uploaded an image. Here is what I see after adding an image and submitting it

However, I am able to add images to a new Post from the admin normally.

CodePudding user response:

Try to add enctype in your template:

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