我在设置查询集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())
添加回答
举报
0/150
提交
取消