我有一系列的视图,这些视图构建了一组关联,然后基于该关联触发一个操作
为了验证,我在forms.py中构建了一个自定义函数,并使用它填充初始选项/验证值
def targets():
o = []
for r in Target.objects.all():
o.append((r.pk, r.host.statline()))
return o
class StageForm(forms.Form):
targets = forms.MultipleChoiceField(choices=targets(), widget=forms.CheckboxSelectMultiple())
在视图中,我计算一个与构建对象相关的新列表,检查以确保所有必需的参数都已定义,并将其作为显示的选项提交
hl = Target.objects.filter(build=b)
cl = []
for h in hl:
if h.host.ready():
cl.append((h.pk, h.host.statline()))
form.fields['targets'].choices = cl
我看到的问题是,如果我向环境中添加了一个新的主机,那么表单将按我所期望的方式运行,并显示准备好进行构建的主机,但是显示的选项将无法通过验证
我从构建中生成的列表和我为验证生成的列表来自同一个地方,新主机显然在表中,但在我重新启动开发服务器之前,它不会出现在验证中
更奇怪的是,我从manage.py shell
得到了预期的结果,而表单仍在用过时的数据进行验证
这仅仅是因为我在开发服务器上运行,还是我的方法论在这里站不住脚,应该切换到覆盖__init__
方法
您应该对queryset使用
ModelMultipleChoiceField
(如果目标字符串表示没有输出正确的显示值,则可以对字段进行子类化并定义
label_from_formset
,如the docs所示相关问题 更多 >
编程相关推荐