【问题标题】:Django ModelChoiceField in forms not displaying properly表单中的 Django ModelChoiceField 无法正确显示
【发布时间】:2025-12-06 16:30:01
【问题描述】:

我使用以下表格来创建问题。这里的community 是用户所属的特定社区。​​p>

class Question(forms.Form):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(Question, self).__init__(*args, **kwargs)
        self.fields["community"].queryset = forms.ModelChoiceField(queryset=self.user.communities.all())

    community = forms.ChoiceField()
    description = forms.CharField(widget=forms.Textarea)

对应的视图是this。

def add_question(request):
    if request.user.is_authenticated():
        form = Question(user=request.user)
        context = {
            'form': form
        }
        return render(request, 'question.html', context)

我在模板文件中适当地调用form.as_table。 该对象正在正确呈现,但我在下拉列表中看不到任何数据。 为什么会出现这个问题,应该怎么做才能解决这个问题。

【问题讨论】:

    标签: django python-2.7 django-forms django-views


    【解决方案1】:

    为您的community 字段使用ModelChoiceField。普通的ChoiceFieldchoices 作为参数,而不是queryset

    当您在__init__ 方法中设置queryset 属性时,为其分配一个查询集,而不是一个表单字段。

    总而言之,你有:

    class Question(forms.Form):
        def __init__(self, *args, **kwargs):
            self.user = kwargs.pop('user')
            super(QuestionForm, self).__init__(*args, **kwargs)
            self.fields["community"].queryset = self.user.communities.all()
    
        community = forms.ModelChoiceField(queryset=Community.objects.none())
        description = forms.CharField(widget=forms.Textarea)
    

    【讨论】:

    • 是的,我使用了问题。抱歉打错了。现在,当我使用 ModelChoiceField 时,我得到 TypeError : __init__() 至少需要 2 个参数(给定 1 个)
    • 查看我的更新答案。 ModelChoiceField 需要一个查询集。您可以使用空查询集,因为您在 __init__ 方法中设置了真正的查询集。
    最近更新 更多