我在设置查询集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())
相关分类