我发现了一些类似的问题,但并不完全。我对Django是'新'的,并且尝试创建一个动态表单,也没有Models。我想要读取一个目录,找到某个类型的文件,然后将这些文件显示在清单中,供选择和稍后处理。我仍然需要制定选择和处理方法,但对于初学者,我只想让清单工作。我在这里找到了清单表格:Django form multiple choice,这就是我的表格。将对象传递给Django表单
这是我到目前为止。打印声明仅用于我自己的疑难解答,并且我始终得到'什么参数?'我的猜测是我没有正确传递参数,但它看起来像我读过的其他示例的数量。
在此先感谢您的支持。
views.py
def select(request):
if request.method == 'POST':
txt_list = [fn for fn in os.listdir('/static/data/') if re.search(r'\.txt$', fn, re.IGNORECASE)]
txt_zip = zip(txt_list, txt_list)
form = SelectForm(request.POST, txt_zip=txt_zip)
if form.is_valid():
choices = form.cleaned_data.get('choices')
# do something with your results
else:
form = SelectForm
return render_to_response('select.html', {'form': form},
context_instance=RequestContext(request))
forms.py
class SelectForm(forms.Form):
def __init__(self, *args, **kwargs):
self.txt = kwargs.pop('txt_zip', None)
super(SelectForm, self).__init__(*args, **kwargs)
if self.txt is not None:
print("Got args")
else:
print("What args?")
CHOICES = (list(self.txt),)
# tuple contents (<value>, <label>)
choices = forms.MultipleChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple())
模板(为完整起见)
<div class="container">
<h2>Select files for reports</h2>
<br/>
<form method='post'>{% csrf_token %}
{{ form.as_p }}
<br/>
<input type='submit' value='Select files' class="btn btn-primary">
</form>
</div>
你确定你在POST时不断收到'args'吗?听起来像你应该在'else'分支中执行'form = SelectForm()',并且应该没有'txt_zip'参数。 –