在django中,如何在每次调用db时创建一个可选的formField来访问db?现在,django加载一次就执行:status = forms.ChoiceField(choices=FormsTools.StatusesToTuples(Status.objects.all())),而不是每次显示表单时都执行。如何使该字段成为动态字段?所以每次显示表单时,可选字段都会有来自db的值?
更新:发布数据:
.
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发布于 2014-07-17 01:16:45
您需要在每次加载表单时调用构造器来更新选项。因此,表单应该是:
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())发布于 2014-07-17 00:33:46
更新了以下更新的问题的答案:
你现在需要让你的模型和表单相匹配:
你的模型有一个IntegerField,你的表单有一个ModelChoiceField。后者返回pk字符串,而不是整数ID。
既然您使用的是模型表单,为什么不让它为您创建字段呢?
class CallForm(forms.ModelForm):
class Meta:
model = Call
fields = ('employee', 'status') # assuming these are what the field names arehttps://stackoverflow.com/questions/24786073
复制相似问题