Ashish Kumar
Ashish Kumar

Reputation: 53

Modelforms : not able to view the editable content while updating

Possibly a newbie question, so please bear with me.

I have a Django form that edits a certain instance of a Model. I am using Modelforms. I am able to edit the instance but I am not able to see the content of instance that I want to edit.

I am learning django right now using video tutorials and in the tutorial adding instance=instance to ModelForm instance and then using form.as_p the values were populated in the input box.

In my case when I got to edit url my input fields are blank. However, whatever I write in new blank form gets updated to that object. What could have been wrong here? I am stuck at this point for 4 days so this question is a very desperate one :)

My form class:

from django import forms
from .models import Entry
class EntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['name','type', 'date', 'description']

My Model:

from django.db import models

class Entry(models.Model):
    name = models.CharField(max_length=200)
    type = models.CharField(max_length= 200)
    date = models.DateTimeField()
    description = models.TextField()

My views look like this :

def update(request,pk):
    instance = get_object_or_404(Entry,pk=pk)
    if request.method == 'POST':
        form = EntryForm(request.POST or None,instance=instance )
        if form.is_valid():
            instance =form.save(commit=False)
            instance.save()
            return HttpResponseRedirect('/')      
    else:
        form = EntryForm()

    return render(request, "form.html", {"name":instance.name,'instance':instance,'form': form})

Form template :

<form method="POST">
    {% csrf_token %}
    {{form.as_p}}

        <button class="btn btn-success" type='submit'>Submit</button>   
    </form>

Upvotes: 0

Views: 29

Answers (1)

Josewails
Josewails

Reputation: 580

You are not passing the instance for the second case. Update your views.py to this.

def update(request,pk):
    instance = get_object_or_404(Entry,pk=pk)
    if request.method == 'POST':
        form = EntryForm(request.POST or None,instance=instance )
        if form.is_valid():
            instance =form.save(commit=False)
            instance.save()
            return HttpResponseRedirect('/')
    else:
        form = EntryForm(instance=instance)

    return render(request, "form.html", {"name":instance.name,'instance':instance,'form': form})

Upvotes: 1

Related Questions