2009-08-16 8 views
3
for field in FIELDS: 
    row = [] 
    row.append("<tr>") 
    row.append("<td>" + str(myform.fields.get(field)) + "</td>") 
    row.append("</tr>") 

    custom_fields.append("".join(row)) 

Quand je donne la variable custom_fields au modèle, tout ce que je reçois est:Comment restituer un formulaire django dans une vue?

<tr><td><django.forms.widgets.CheckboxInput object at 0x1fa7d90></td></tr> 

Comment puis-je obtenir le formulaire rendu correctement?


C'est ce que je vais faire à la suite:

form1 = CustomForm1() 
form2 = CustomForm2() 
form3 = CustomForm3() 

for field in FIELDS: 
    row = [] 
    row.append("<tr>") 
    row.append("<td>" + str(form1.fields.get(field)) + "</td>") 
    row.append("<td>" + str(form2.fields.get(field)) + "</td>") 
    row.append("<td>" + str(form3.fields.get(field)) + "</td>") 
    row.append("</tr>") 

    custom_fields.append("".join(row)) 

Je peux donc afficher tous les champs de formulaire dans un seul tableau.

+4

Pourquoi diable écrivez-vous du code HTML dans votre vue, puis passez-le au modèle? Vous devriez faire toute la génération HTML dans le modèle, c'est ce que c'est. –

Répondre

8

Je viens de comprendre cela. Il est form[field] au lieu de form.fields[field]

>>> f = MyForm() 
>>> f 
<myform.forms.MyForm object at 0x1fa7810> 

>>> f['myfield'] 
<django.forms.forms.BoundField object at 0x20c7e50> 

>>> f.fields['myfield'] 
<django.forms.fields.BooleanField object at 0x1fa7850> 

si form.fields est une liste de tous les champs non liés, et form.__getitem__ est un appelable qui renvoie les champs liés.

0

Passez-vous la liste des champs au modèle par lui-même? Les champs doivent faire partie d'un objet dérivé de forms.Form pour que le modèle le rende correctement. Étant donné que vous avez l'appel à myform.fields.get(), il semble que vous avez un objet Form; qu'essayez-vous exactement de faire avec cette liste de champs?

4

Comme explained here, les instances de forme ont des méthodes de rendu prédéfinies comme as_table, as_ul, as_p que vous pouvez utiliser dans les modèles.

as_table semble réduire vos besoins mais dans le cas contraire, vous pouvez facilement ajouter vos méthodes de rendu personnalisé à vos propres classes de formulaire. Jetez un oeil à la classe django.forms.forms.BaseForm est une bonne idée à ce stade.

+3

+1. Django fournit une inteface pour rendre vos formulaires pour vous, donc mieux vaut l'utiliser. – anschauung

Questions connexes