[英]django dynamic forms - Dynamic ChoiceField
在django中,我如何使每次调用数据库时都可以选择一个formField来访问该数据库? 现在,行: status = forms.ChoiceField(choices=FormsTools.StatusesToTuples(Status.objects.all()))
在加载django之后执行,而不是在每次显示表单时执行。 如何使该领域充满活力? 所以每次显示表单时,selectable字段都会有来自db的值?
更新:POST数据:
.
status: u'4'
.
.
在模型中,字段如下所示: status = models.IntegerField()
风景:
def edit_call(request, call_id):
c = Call.objects.get(id=call_id)
if request.POST:
form = CallForm(request.POST, instance=c)
print form.errors
if form.is_valid():
form.save()
return HttpResponseRedirect('/ViewCalls/')
else:
form = CallForm(instance=c)
args = {}
args.update(csrf(request))
args["form"] = form
args["id"] = call_id
t = get_template('edit_call.html')
cont = RequestContext(request, args)
html = t.render(cont)
return HttpResponse(html)
形式:简单为:
class CallForm (forms.ModelForm):
employee_id = forms.ModelChoiceField(queryset=Employee.objects.all())
status = forms.ModelChoiceField(queryset=Status.objects.all())
class Meta():
model = Call
每次加载表单以更新选择时,都需要调用构造函数。 因此,表单应为:
class CallForm(forms.ModelForm):
...
status = forms.ChoiceField()
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=None,
empty_permitted=False):
super(CallForm, self).__init__(data, files, auto_id, prefix, initial, error_class,
label_suffix, empty_permitted)
self.fields['status'].choices = FormsTools.StatusesToTuples(Status.objects.all())
更新后的问题:
现在,您需要使模型和表单匹配:
您的模型有一个IntegerField,您的窗体有一个ModelChoiceField。 后者返回一个pk字符串,而不是整数ID。
鉴于您正在使用模型表单,为什么不让它为您创建字段呢?
class CallForm(forms.ModelForm):
class Meta:
model = Call
fields = ('employee', 'status') # assuming these are what the field names are
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.