渲染时捕获 TypeError:“BoundField”对象不可迭代
Posted
技术标签:
【中文标题】渲染时捕获 TypeError:“BoundField”对象不可迭代【英文标题】:Caught TypeError while rendering: 'BoundField' object is not iterable 【发布时间】:2011-05-08 17:55:48 【问题描述】:我正在尝试将标签列表显示为 tag.name(而不是列表)。但是,当我尝试在列表上运行 for 循环时,它会抛出 "Caught TypeError while rendering: 'BoundField' object is not iterable."
<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)
非常感谢!
【问题讨论】:
您是否尝试过在 django shell 中加载 ProfileForm 并查看form.tags.all()
返回的内容?
我没有。我对 django shell 不是很有经验。那么从表单导入 ProfileForm ... 那么呢?
from forms import ProfileForm
然后form = ProfileForm(initial=blahblahblah...)
然后form.tags.all()
看看它输出了什么
>>> form = ProfileForm(initial='fullname': 'emile', 'tags': 'shoe','cheese') >>> form.tags.all( )回溯(最近一次调用最后):文件“来自Howto Post的代码
模板:
% for tag in blogpost.get_tags %
<a href="/blog/tag/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)
【讨论】:
【参考方案2】:form.tags
在您的表单中定义为带有TextArea
小部件的CharField
。因此,当您访问 form.tags
时,您访问的是该字段,而不是底层的 tags
模型属性(我假设它是某种 m2m)。
如果没有看到你的模型,就不可能准确地告诉你如何实现你想要做的事情,但一般的想法是你需要迭代标签对象,而不是表单字段。
【讨论】:
这是使用 django-tagging 应用程序,所以这可能会有所帮助-code.google.com/p/django-tagging【参考方案3】:% for tag in form.tags.choices %tag.1% endfor %
【讨论】:
实际上呈现方式与 .all & tag.name 相同:skitch.com/emilepetrone/d99eq/mentor77以上是关于渲染时捕获 TypeError:“BoundField”对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: command.execute 在捕获错误时不是函数。此外,冷却不起作用。在 Discord.js 上
如何解决反应身份验证中的未捕获(承诺中)TypeError?
如何更正错误未捕获的 typeError 验证器未定义并防止我的表单在错误时发布
Chrome 中的“未捕获的 TypeError:非法调用”