2010-11-11 24 views
4

J'essaie d'afficher une liste de balises comme tag.name (au lieu de la liste). Toutefois, lorsque j'essaie d'exécuter une boucle for-over sur la liste, elle renvoie "Caught TypeError lors du rendu: l'objet 'BoundField' n'est pas itérable."Attrapé TypeError lors du rendu: l'objet 'BoundField' n'est pas itérable

<dd>{% for tag in form.tags %}{{tag.name}}{% endfor %}</dd> 

par .tout va Itération charger la page, mais ne montre pas le champ Tags.

<dd>{% for tag in form.tags.all %}{{tag.name}}{% endfor %}</dd> 



    class Profile(models.Model): 

    user = models.ForeignKey(User) 

    tagging.register(Profile) 




form = ProfileForm(initial={ 
     "fullname":fullname, 
     "location":request.user.get_profile().location, 
     "website":request.user.get_profile().website, 
     "twitter_account":request.user.get_profile().twitter_account, 
     "email":request.user.email, 
     "bio":request.user.get_profile().bio, 
     "tags":request.user.get_profile().tags 
    }) 



    class ProfileForm(forms.Form): 
     fullname = forms.CharField(
      label=_("Full Name"), 
      widget=forms.TextInput(), 
          required=False) 

     location = forms.CharField(
      label=_("Location"), 
      widget=forms.TextInput(), 
          required=False) 

     website = forms.CharField(
      label=_("Website"), 
      widget=forms.TextInput(), 
          required=False) 

     twitter_account = forms.CharField(
      label=_("Twitter"), 
      widget=forms.TextInput(), 
          required=False) 

     bio = forms.CharField(
      label=_("Bio"), 
      widget=forms.Textarea(), 
          required=False) 

     tags = forms.CharField(
    label=_("Keywords"), 
    widget=forms.Textarea(), 
          required=False)   

Merci d'avance!

+0

Avez-vous essayé de charger le ProfileForm dans la coquille de django et avoir juste une Regardez ce que 'form.tags.all()' r eturns? –

+0

Je n'ai pas. Je ne suis pas très expérimenté avec le shell django. Donc à partir des formulaires import ProfileForm ... alors? – Emile

+0

'à partir des formulaires import ProfileForm' puis' form = ProfileForm (initial = {blahblahblah ...}) 'then' form.tags.all() 'et voir ce qu'il produit –

Répondre

0
{% for tag in form.tags.choices %}{{tag.1}}{% endfor %} 
+0

Cela rend effectivement la même manière que le .all & {{tag.name}}: https://skitch.com/emilepetrone/d99eq/mentor77 – Emile

0

form.tags est défini dans votre formulaire en CharField avec un widget TextArea. Ainsi, lorsque vous accédez à form.tags, vous accédez à ce champ, pas à l'attribut de modèle tags sous-jacent (que je suppose être une sorte de m2m). Sans voir vos modèles, il est impossible de vous dire exactement comment réaliser ce que vous essayez de faire, mais l'idée générale est que vous devez parcourir les objets du tag, pas le champ de formulaire.

+0

Ceci utilise le djang o-tagging app donc c'est probablement la pièce qui aiderait- http://code.google.com/p/django-tagging/ – Emile

1

code d'un Howto Post


Modèle:

{% for tag in blogpost.get_tags %} 
    <a href="/blog/tag/{{tag}}" alt="{{tag}}" title="{{tag}}">{{tag}}</a> 
{%endfor%} 



Modèle:

from django.db import models 
from tagging.fields import TagField 
from tagging.models import Tag 

class BlogPost(models.Model): 

    title = models.CharField(max_length=30) 
    body = models.TextField() 
    date_posted = models.DateField(auto_now_add=True) 
    tags = TagField() 

    def set_tags(self, tags): 
     Tag.objects.update_tags(self, tags) 

    def get_tags(self, tags): 
     return Tag.objects.get_for_object(self)