2011-03-22 3 views
0

Je suis en train d'explorer des formulaires django et j'ai un problème avec lequel j'espère que quelqu'un pourra m'aider.NameError lors de la tentative de remplissage du champ de formulaire à partir du modèle

que je suis un exemple tiré de Creating forms from models | Django documentation

J'ai la forme;

# forms.py 

from django import forms 
from my_project.my_app.models import Author 

class AuthorForm(forms.Form): 
    name = forms.CharField(max_length=100) 
    title = forms.CharField(max_length=3, 
      widget=forms.Select(choices=TITLE_CHOICES)) 
    birth_date = forms.DateField(required=False) 

et le modèle;

#models.py 

from django.db import models 

TITLE_CHOICES = (
    ('MR', 'Mr.'), 
    ('MRS', 'Mrs.'), 
    ('MS', 'Ms.'), 
) 
class Author(models.Model): 
    name = models.CharField(max_length=100) 
    title = models.CharField(max_length=3, choices=TITLE_CHOICES) 
    birth_date = models.DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

Cependant, lorsque je reçois l'erreur suivante lorsque j'essaie d'accéder au formulaire;

NameError à/

nom

'TITLE_CHOICES' est pas défini

demande Méthode: GET URL de demande: http://192.168.1.111:8000/ Django Version: 1.2.4 Type d'exception: Exception NameError Valeur: nom 'TITLE_CHOICES' n'est pas défini

Y at-il quelque chose que je devrais faire pour autoriser forms.py t o accéder à TITLE_CHOICES dans models.py?

Merci d'avance.

+1

Vous semblez avoir complètement ignoré ou mal interprété la documentation que vous lien. Ce n'est pas une forme de modèle - c'est une forme standard. Vous ne devriez pas avoir à re-déclarer les champs du tout. –

Répondre

3

TITLE_CHOICES doit être définie à l'intérieur de la classe:

from django.db import models 

class Author(models.Model): 
    TITLE_CHOICES = (
     ('MR', 'Mr.'), 
     ('MRS', 'Mrs.'), 
     ('MS', 'Ms.'), 
    ) 
    name = models.CharField(max_length=100) 
    title = models.CharField(max_length=3, choices=TITLE_CHOICES) 
    birth_date = models.DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

Et sous la forme:

from django import forms 
from my_project.my_app.models import Author 

class AuthorForm(forms.Form): 
    name = forms.CharField(max_length=100) 
    title = forms.CharField(max_length=3, 
      widget=forms.Select(choices=Author.TITLE_CHOICES)) 
    birth_date = forms.DateField(required=False) 
+0

Merci dgel, votre réponse a résoudre le problème. Merci beaucoup. – Jamie

+0

Pas de problème. Vous devriez cependant prendre en compte le commentaire de Daniel et relire la documentation sur les formes de modèles - une forme de modèle obtiendra automagiquement tous les champs de formulaire corrects du modèle lui-même, vous n'avez pas besoin de les définir. – dgel

Questions connexes