Python Django类型错误';用户';对象是不可编辑的

Python Django类型错误';用户';对象是不可编辑的,python,django,Python,Django,是否无法使用User.objects.all()在用户对象上迭代?? 我也试着这么做,但没有用 我有一张表格 class AddMemberForm(Form): user = forms.ChoiceField(choices=User.objects.all(), initial='Choose a User', ) 我试图通过一个模板来呈现它。下面views.py的相应部分 class StationHome(V

是否无法使用User.objects.all()在用户对象上迭代?? 我也试着这么做,但没有用

我有一张表格

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>

{%csrf_令牌%}
{{form1}}
但由于此表单,我无法访问URL。我在对应的URL上得到了一个
类型错误
“User”对象不可编辑
错误

请有人帮忙。

使用而不是简单的
选项字段

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)

我有Django的
View
类的一个子类的
post
方法,该类从表单中获取用户。我希望所选用户添加到名为Station的模型的多个关系中
station=station.objects.get(pk=pk)
station.members.add(form.cleaned_data['user'])
但这不起作用。你能告诉我怎么了吗?我在/station/2/addmember'user'上得到
keyrerror
error!我写了
form=form(request.post)
而不是
AddMemberForm(request.post)
:/Catavaran你能告诉我这个吗;如果我想在创建表单实例时更改查询集,该怎么办?
form1=AddMemberForm()form1.user.queryset=station.members.all()
这似乎不起作用使用表单的
字段
属性:
form1.fields['user'].queryset=…
。另一个例子请参见我答案中的更新。