noemi
noemi

Reputation: 45

Model Forms in Django

I am doing a web interface using HTML and django. My problem is that I want to show a form in the website so that the user can fill the fields of one of the models. Although I've read some examples and documentation about how to do it, I cannot see the form in my website.

In my django app, I have the following model:

class Signature(models.Model):    
    sig = models.ForeignKey(Device)    
    STATE = models.CharField(max_length=3, choices=STATE_CHOICES)    
    interval = models.DecimalField(max_digits=4, decimal_places=2)

As the form is related with that model, I have created this ModelForm class:

class SignatureForm(ModelForm):
    class Meta:
        model = Signature

After that, I have define the following view:

def SigEditor(request):

   if request.method == 'POST':

       form = SignatureForm(request.POST)

       if signature_form.is_valid():

           # Create a new Signature object.

           signature_form.save()

        return HttpResponseRedirect('eQL/training/form.html')

   else:

       form = SignatureForm()

   return render_to_response('eQL/training/showImage.html',
                             {'signature_form' : SignatureForm })

Finally, I can represent the form in my website by adding:

  <fieldset><legend>Device Information</legend>
      <form action="" method="post">

    {{ signature_form }} < br>
      <input type="submit" value="Submit">
      </form>

  </fieldset>

If I open the website, there are no errors but I don't see the form. However, before the submit button, appears:

< class 'eQL.models.SignatureForm' > 

Can anyone help me? I am quite new in this web framework. Thanks!!

Upvotes: 1

Views: 1334

Answers (2)

manji
manji

Reputation: 47968

Update:

you have 2 problems here:

1st mistake: you name the form instance with 2 names depending on form method (but this would have raised an exception if it's not for the 2nd error you made)

2nd error: you should give the form instance to the template,

not the class ('signature_form' : SignatureForm):

return render_to_response('eQL/training/showImage.html',
                          {'signature_form' : form})

Upvotes: 6

VGE
VGE

Reputation: 4191

The template tag {{signature_form}} is expanded as < class 'eQL.models.SignatureForm' > because it is a class not an object. You write a reference to the class not an object instance You have to write :

return render_to_response('eQL/training/showImage.html', {'signature_form' : form})

Instead of :

return render_to_response('eQL/training/showImage.html', {'signature_form' : SignatureForm})

Upvotes: 0

Related Questions