为了账号安全,请及时绑定邮箱和手机立即绑定

带有 ModelMultipleChoiceField 的 Django 表单呈现为空

带有 ModelMultipleChoiceField 的 Django 表单呈现为空

陪伴而非守候 2021-06-27 16:08:18
我在设置查询集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 = ExportFormdef 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())
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号