簡體   English   中英

Django TypeError'User'對象不可迭代

[英]Django TypeError 'User' object is not iterable

是否無法使用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相應的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM