渲染时捕获TypeError: 'BoundField'对象不可迭代
我想把一堆标签显示出来,想让它们只显示标签的名字,而不是整个列表。但是当我试着用循环去遍历这个列表的时候,出现了一个错误,提示“渲染时捕获到类型错误:‘BoundField’对象不可迭代。”
<dd>{% for tag in form.tags %}{{tag.name}}{% endfor %}</dd>
如果我用.all去遍历的话,页面会加载出来,但标签的字段却不显示。
<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)
非常感谢!
3 个回答
0
form.tags
在你的表单中被定义为一个 CharField
,并且使用了 TextArea
这个输入框。所以当你访问 form.tags
时,其实是在访问这个表单字段,而不是底层的 tags
模型属性(我猜这个属性可能是某种多对多关系)。
如果不看到你的模型,确实很难准确告诉你该怎么做,但大致的思路是,你需要遍历标签对象,而不是表单字段。
0
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,程序就会做出反应。这种情况我们可以用“事件”来描述。
事件就像是生活中的一些事情,比如你按下电灯开关,灯就亮了。这里的“按下开关”就是一个事件,而“灯亮了”就是对这个事件的反应。
在编程中,我们通常会使用一些代码来监听这些事件,并在事件发生时执行相应的操作。这就像是给程序装上了“耳朵”,让它能够听到用户的操作,并做出反应。
例如,如果我们想让程序在用户点击按钮时显示一条消息,我们就会写一些代码来实现这个功能。这样,当用户点击按钮时,程序就会自动显示那条消息。
总之,事件和事件处理就是让程序能够对用户的操作做出反应的机制。理解这一点,对于编写交互性强的程序非常重要。
{% for tag in form.tags.choices %}{{tag.1}}{% endfor %}
1
这是来自一个教程帖子的代码。
模板:
{% for tag in blogpost.get_tags %}
<a href="/blog/tag/{{tag}}" alt="{{tag}}" title="{{tag}}">{{tag}}</a>
{%endfor%}
模型:
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)