【问题标题】:Getting object not iterable error in django form以 django 形式获取对象不可迭代错误
【发布时间】:2012-10-16 09:01:35
【问题描述】:

在我的表格中我有这个

 mychoices = User.objects.filter(category__name='city')

我收到此错误

User Object is not iterable。我是 Django 新手

这是下一行

relevance = forms.MultipleChoiceField(choices=mychoices, widget=forms.CheckboxSelectMultiple())

如果我评论这一行,那么我看不到任何错误

编辑:

我发现了错误,我不得不使用这个

(choices=[ (o.id, str(o)) for o in User.objects.all()])  Then it works.

有谁知道以前的方法有什么问题

【问题讨论】:

  • objects 应该是可迭代的,要么 User 不是模型,要么这不是发生错误的地方。我敢打赌后者,因为这个错误通常会循环出现。
  • 废话它可以返回一个可能导致此错误的空列表。
  • User 是一个模型,我什至尝试过 User.objects.all()。它说同样的错误。我正在尝试所有型号名称并出现相同的错误。我在 forms.py 中尝试这个。这可能是个问题
  • 请附上整个回溯。
  • 我发现了问题。查看编辑

标签: python django


【解决方案1】:

您只需要指定小部件类,而不是调用构造函数:

relevance = forms.MultipleChoiceField(choices=mychoices, widget=forms.CheckboxSelectMultiple)

更新 选择必须是可迭代的 2 元组。首先是 POST 请求参数中返回的值,其次是 UI 上显示的字符串表示形式。可能,这样做是有意义的:

choices = User.objects.filter(category__name='city').values_list('id', 'first_name')

你会得到:

(1, 'Mark')
(2, 'Jack')
...

当用户选择选项并发布表单时,您将在参数中收到用户ID,因此您可以通过它检索用户对象。

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 2019-01-10
    • 2013-12-01
    • 2021-08-21
    • 2017-06-12
    • 2022-10-13
    • 2011-12-13
    • 2016-09-11
    • 2019-01-12
    相关资源
    最近更新 更多