2010-07-24 2 views
3

J'utilise un modèle pour afficher uniquement un sous-ensemble des champs du modèle. Lorsque le formulaire est soumis, il échoue form.is_valid() mais form.errors est vide. Je préfère ne pas afficher tout mon code, mais ci-dessous est un échantillon:Echec du modelform is_valid sans paramétrage form.errors

Modèle et le formulaire

class Videofiles(models.Model): 
    active = models.CharField(max_length=9) 
    filenamebase = models.CharField(max_length=180, primary_key=True, db_column='FilenameBase') 
    program = models.CharField(max_length=60, db_column='Program') 
    displayname = models.CharField(max_length=150, db_column='DisplayName') 
    description = models.TextField(db_column='Description', blank=True) 
    tagskeywords = models.TextField(db_column='TagsKeywords', blank=True) 

    class Meta: 
     db_table = u'legacyTable' 

class VideoFilesForm(ModelForm): 
    filenamebase = forms.CharField(max_length=30) 
    displayname = forms.CharField(max_length=30) 
    description = forms.CharField(max_length=30, required=False) 
    tagskeywords = forms.CharField(max_length=60, required=False) 

    class Meta: 
     model=Videofiles 
     fields=['filenamebase','displayname','description','tagskeywords'] 

Voir

def editClip(request, clipId): 
    clip = Videofiles.objects.get(filenamebase=clipId) 
    form = VideoFilesForm(instance=clip) 
    if request.method == 'POST': 
     if 'save' in request.POST: 
      if form.is_valid(): 
       form.save() 
      else: 
       print form.errors 
    return render_to_response('legacyDB/edit_clip.html',locals()) 
+0

J'ai découvert que pour une raison quelconque ma forme n'est pas lié. En regardant pourquoi c'est le cas. – jamida

Répondre

8

Votre formulaire est non lié, parce que vous n'êtes pas de passage tout données à lui. Appeler is_valid sur un formulaire non lié retournera toujours False, avec des erreurs vides (voir le form api docs).

Votre vue devrait être quelque chose comme ce qui suit:

def editClip(request, clipId): 
    clip = Videofiles.objects.get(filenamebase=clipId) 
    if request.method == 'POST': 
     # create bound form with input from request.POST 
     form = VideoFilesForm(request.POST, instance=clip) 
     if 'save' in request.POST: 
      if form.is_valid(): 
      form.save() 
     else: 
      print form.errors 
    else: 
     # create unbound form to display in template 
     form = VideoFilesForm(instance=clip) 
      return render_to_response('legacyDB/edit_clip.html',locals()) 
+0

Merci ... j'ai compris ça après que je sois parti un peu. Je suis un idiot. – jamida

Questions connexes