Django TypeError'User'对象不可迭代
问题内容:
使用User.objects.all()无法遍历User对象吗?我正在尝试做同样的事情,但无济于事
我有一个表格;
class AddMemberForm(Form):
user = forms.ChoiceField(choices=User.objects.all(),
initial='Choose a User',
)
我正在尝试通过模板进行渲染。下面对应的views.py部分;
class StationHome(View):
def get(self, request, pk):
station = Station.objects.get(pk=pk)
channels = Channel.objects.filter(station=station)
members = station.members.all()
form1 = AddMemberForm()
return render(request,
"home_station.html",
{"form1":form1,
"station":station,
"channels":channels,
"members":members,
},
)
最后是相应模板的相应部分,
<form method="post" action="{% url 'add_member' station.pk %}">
{% csrf_token %}
{{ form1 }}
</form>
但是由于这种形式,我无法访问URL。我收到TypeError at
相应的网址'User' object is not iterable
错误。
有人请帮忙。
问题答案:
使用ModelChoiceField
而不是简单的ChoiceField
:
user = forms.ModelChoiceField(queryset=User.objects.all(),
empty_label="(Choose a User)")
更新 :您可以在窗体的构造函数中更改查询集。例如,如果您要从表单中排除已经添加的成员:
class AddMemberForm(Form):
...
def __init__(self, *args, **kwargs):
station = kwargs.pop('station')
super(AddMemberForm, self).__init__(*args, **kwargs)
if station:
self.fields['user'].queryset = User.objects.exclude(
id__in=station.members.all())
然后使用station
参数创建表单:
form1 = AddMemberForm(station=station)