渲染时捕获TypeError: 'BoundField'对象不可迭代

4 投票
3 回答
3091 浏览
提问于 2025-04-16 06:56

我想把一堆标签显示出来,想让它们只显示标签的名字,而不是整个列表。但是当我试着用循环去遍历这个列表的时候,出现了一个错误,提示“渲染时捕获到类型错误:‘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)      

撰写回答