pythondjangosocial-networkingmodelformupdatemodel

Updating ModelForm Django 1.10


I'm fairly new to coding in general, so please forgive my ignorance.

I have a ModelForm (Django 1.10 -just in case-) for a 'post' on a social network website:

models.py:

class Post(models.Model):
   user = models.ForeignKey(User)
   text = models.TextField()
   image = models.ImageField(blank=True)
   draft = models.BooleanField(default=False)
   submission_date = models.DateTimeField(auto_now_add=True)

   def __unicode__(self):
       return self.text

forms.py:

class PostForm(forms.ModelForm):
    class Meta:
         model = Post
         fields = ['text', 'image', 'draft']

To update a post, this is its function: views.py:

def edit_post(request, post_id):
  post = get_object_or_404(Post, pk=post_id)

  if not request.user.is_superuser and\
  not request.user == post.user:
    raise PermissionDenied

  if request.method == 'POST':
    form = PostForm(request.POST, instance=post)
    if form.is_valid():
      post = form.save(commit=False)
      post.user = request.user
      post.save()
      context = {'post': post,'form': form}
      return HttpResponse(render(request, 'accounts/view_post.html', context))

   elif request.method == 'GET':
     form = PostForm(request.GET, instance=post)
     context = {'post': post,'form': form}
     return HttpResponse(render(request, 'accounts/edit_post.html', context))

in the template:

<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% include 'accounts/form_template.html' %}
<input class="btn btn-btn-success" type="submit" value="Save Post">
</form>

My question is: when trying to update, why does the original field input not show up? The fields turn up empty as if I were creating a new post.

The more detailed answer, the more I would appreciate it. Thank you in advance.


Solution

  • Turns out all I needed to do was remove 'request.GET': in views.py:

    def edit_post(request, post_id):
         post = get_object_or_404(Post, pk=post_id)
         ...
         ...
        elif request.method == 'GET':
             form = PostForm(instance=post)
    
             context = {'post': post,
                        'form': form}
             return HttpResponse(render(request, 'accounts/edit_post.html', context))
    

    Thank you to everyone who tried to help, especially @Zagorodniy Olexiy.