'Questions'对象不可迭代,Django。

19

我有一个叫做Question的模型。该模型允许用户创建新问题。我正在尝试使用对象集合填充多个表单。当我尝试使用查询集初始化时,出现了以下错误:

 'Question' object is not iterable


File "C:\mysite\pet\views.py" in DisplayAll
294.             formset = form(initial=q)

models.py

class Question(models.Model):
    question= models.CharField(max_length=500)
    user = models.ForeignKey(User)

表单

class QuestionForm(forms.ModelForm):
question= forms.CharField(required=True,max_length=51)
class Meta:
    model = Question
    fields = ('question',)

视图

def DisplayAll(request):
    q = Question.objects.filter(user=request.user)

    form = formset_factory(QuestionForm)
    formset = form(initial=q)
    return render(request,'question.html',{'formset':formset})

模板

 {% for f in formset %}
 {{f}}
 {% endfor %}

尝试在 form(initial=q) 中添加对 "all()" 函数的调用,即将其改为 form(initial=q.all()) - will-hart
好的,从记忆中来看,这个错误基本上意味着它期望在查询中得到一个对象列表,但实际上没有得到。 - will-hart
尝试使用initial=[question.question for question in q],这应该就可以了。您正在传递一个查询集对象,但是initial期望用于填充表单集的值。 - Samuele Mattiuzzo
没想到它会起作用,只是想确保问题在那之后消失了。现在发布正确的解决方案 :) - Samuele Mattiuzzo
1个回答

28

Initial需要一个值字典,因此您只需要像这样更改查询集:

Initial预期接收一个字典类型的值,所以您只需要将查询集更改为以下内容:

q = Question.objects.filter(user=request.user).values()

查看关于values()文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接