带有 ModelMultipleChoiceField 的 Django 表单呈现为空

我在设置查询集ModelMultipleChoiceField取决于用户的表单时遇到问题。我的目标是实现导出功能。


我的观点是这样的:


class ExportView(FormView):

    template_name = 'ExportTemplate.html'


    def get(self, request, *args, **kwargs):

        self.form_class = ExportForm(user = request.user)

        return render(request, self.template_name, {'form': self.form_class})


    def get_success_url(self):

        return '/addrbook/'


    def form_valid(self, form):

        # This method is called when valid form data has been POSTed.

        # It should return an HttpResponse.

        return super().form_valid(form)

形式:


class ExportForm(forms.Form):

    def __init__(self, user, *args, **kwargs):

        usersContacts = ContactManager().getAllUsersContacts()

        self.contactList = forms.ModelMultipleChoiceField(queryset = usersContacts[str(user)])

        print(usersContacts[str(user)])

        super(ExportForm, self).__init__(*args, **kwargs)

我验证了查询集不为空,它包含一个模型对象列表。


我的模板如下所示:


<form method="post">{% csrf_token %}

{{ form }}

<input type="submit">

</form>

唯一被渲染的是提交按钮。


另一件让我完全不确定 Python 基础知识的事情是这段代码:


class ExportForm(forms.Form):

    contactList = forms.ModelMultipleChoiceField(queryset = [])


    def __init__(self, user, *args, **kwargs):

        usersContacts = ContactManager().getAllUsersContacts()

        self.contactList.queryset = usersContacts[str(user)]

        print(usersContacts[str(user)])

        super(ExportForm, self).__init__(*args, **kwargs)

返回运行时错误:


'ExportForm' object has no attribute 'contactList' 

这怎么可能?contactList 成员是 ExportForm 类定义的一部分,“self”应该指向该类的一个对象。


有人可以向我解释为什么表单字段呈现为空和/或指向我将用户传递给表单的更好方法吗?


编辑:这是我对答案所做的更改以使其正常工作,尽管我现在偶然发现了一个不同的问题(该字段需要一个查询集,而不是模型对象列表):


看法:


class ExportView(FormView):

template_name = 'ExportTemplate.html'

form_class = ExportForm


def get_form_kwargs(self):

    kwargs = super(ExportView, self).get_form_kwargs()

    kwargs['user'] = self.request.user

    return kwargs

形式:


class ExportForm(forms.Form):

contactList = forms.ModelMultipleChoiceField(queryset = Contact.objects.none())



陪伴而非守候
浏览 259回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python