2009-09-13 14 views
0

J'essaie d'écrire une application django très simple. Je ne peux pas l'obtenir pour montrer ma forme à l'intérieur de mon modèle.django newbie. J'ai des problèmes avec ModelForm

<form ...> 
{{form.as_p}} 
</form> 

cela ne montre absolument rien. Si j'ajoute un bouton de soumission, cela ne montre que ça.

Dois-je déclarer un objet de formulaire héritant de forms.Form? Peut-il être fait avec ModelForms?

[MISE À JOUR] Résolu! (Excuses pour perdre votre temps)

Dans mon dossier urls j'avais:

(r'login/$',direct_to_template, {'template':'register.html'} 

à Switched:

(r'login/$','portal.views.register') 

Et oui, je me sens mal.

Contexte:

J'ai un modèle d'étudiant, et j'ai une page d'inscription. Quand il est accédé, il devrait afficher un champ de texte demandant le nom des étudiants. Si l'étudiant complète ce champ, il l'enregistre.

#models.py 

class Student(models.Model): 
    name = models.CharField(max_length =50) 

#forms.py 
class StudentForm (forms.ModelForm): 
    class Meta: 
     model = Student 

Alors, voici mon avis:

def register(request):                                 
      if request.method == 'POST': 
        form = StudentForm(request.POST) 
        if form.is_valid(): 
          form.save() 
          return render_to_response('/thanks/') 
      else: 

        student = Student() 
        form = StudentForm(instance =student) 

      return render_to_response('register.html',{'form':form}) 
+0

Vous n'avez pas besoin de transmettre une instance pour créer un nouvel étudiant. Je ne suis pas sûr que ce soit ce qui fait que le formulaire ne fonctionne pas, mais c'est définitivement inutile. –

+0

Mon mauvais: J'utilisais la fonction direct_to_template dans mon fichier urls.py Merci à tous! – Tom

Répondre

2

Le problème est à votre avis. Vous n'aurez aucun objet étudiant existant à extraire de la base de données. L'exemple de code suivant vous aidera à implémenter une vue "créer". En guise de remarque, vous pouvez utiliser la fonction de vue générique direct_to_template pour vous faciliter la vie.

def add_student(request): 
    if request.method == 'POST': 
     form = StudentForm(request.POST) 
     if form.is_valid(): 
     new_student = form.save() 

     return HttpResponseRedirect('/back/to/somewhere/on/success/') 
    else: 
     form = StudentForm() 

    return direct_to_template(request, 
           'register.html', 
           {'form':form}) 
+0

merci, mais le formulaire n'est toujours pas affiché la première fois que j'accède à l'URL. Regardera vos conseils si. – Tom

+0

Je suis désolé, vous avez absolument raison. – Tom

Questions connexes