django预填充modelform-什么都不发生
这一定是件很简单的事,但我似乎无法克服 我正在尝试构建一个表单,用户可以在其中更新ModelForm。首先,他插入一个用户id,然后我想向他展示用原始数据预填充的表单,这样他就可以只更改他想要的字段 在我的朋友google、stackoverflow和django文档的帮助下,我得出以下结论: views.pydjango预填充modelform-什么都不发生,django,django-forms,instance,Django,Django Forms,Instance,这一定是件很简单的事,但我似乎无法克服 我正在尝试构建一个表单,用户可以在其中更新ModelForm。首先,他插入一个用户id,然后我想向他展示用原始数据预填充的表单,这样他就可以只更改他想要的字段 在我的朋友google、stackoverflow和django文档的帮助下,我得出以下结论: views.py user = User.objects.get(user_id=usr) if request.method == 'POST': form = TableFor
user = User.objects.get(user_id=usr)
if request.method == 'POST':
form = TableForm(request.POST)
if form.is_valid():
#do something
else:
form = TableForm(instance=user)
return render_to_response('template.html',{'form':form})
forms.py
class TableForm(forms.ModelForm):
pres_clinic = forms.ModelChoiceField(queryset=PresClinic.objects.all(),
widget=SelectWithPop(), label=ugettext("Clinic presentation"),
required=False)
MAYBECHOICES = (
('', '---------'),
(ugettext('Yes'), ugettext('Yes')),
(ugettext('No'), ugettext('No')))
bcg_scar = forms.ChoiceField(choices=MAYBECHOICES, label=ugettext(
"BCG scar"), required=False)
mantoux_register = forms.ChoiceField(choices=MAYBECHOICES,
label=ugettext("Mantoux register"), required=False)
date_diag = forms.DateField(widget=DateTimeWidget, label=ugettext(
"Diagnosis date"), required=False)
situation = forms.ModelChoiceField(queryset=Situation.objects.all(),
widget=SelectWithPop(), label=ugettext("Patient status"),
required=False)
date_situation = forms.DateField(widget=DateTimeWidget, label=ugettext(
"Date patient status"), required=False)
class Meta:
model = Table
fields = ('pres_clinic', 'bcg_scar', 'mantoux_register',
'date_diag', 'situation', 'date_situation')
def clean(self):
cleaned_data = self.cleaned_data
diag = cleaned_data.get('date_diag')
errors = []
now = datetime.date.today()
if diag is not None and diag != u'':
if diag > now:
errors.append(ugettext('The field "Diagnosis date" should be '
'smaller than the actual date'))
if errors:
raise ValidationError(errors)
return cleaned_data
模板:
{{ form }} # presents the empty form and not the data from that user
django的版本是1.4
有人能告诉我哪里出了问题,为什么我看不到填充的表单吗
非常感谢您需要定义一个用于初始数据的字典,并从TableForm(instance=user)更改为TableForm(initial=dict),例如:
user = User.objects.get(user_id=usr)
if request.method == 'POST':
form = TableForm(request.POST)
if form.is_valid():
#do something
else:
data = {'pres_clinic' : 'value', 'bcg_scar' : 'value', 'mantoux_register' : 'value'}
form = TableForm(initial=data)
return render_to_response('template.html',{'form':form})
我还将把render to response放在if语句之外,这样如果表单无效,页面应该重新加载并显示任何错误
有关
我希望这有帮助 您可以尝试“从模型到命令”
from django.forms.models import model_to_dict
user = User.objects.get(user_id=usr)
if request.method == 'POST':
form = TableForm(request.POST)
if form.is_valid():
#do something
else:
form = TableForm(initial=model_to_dict(user))
return render_to_response('template.html',{'form':form})
您能在表单代码中快速编辑吗?正如在tableform代码中一样…@Jeff我添加了表单,但是我省略了一些行,因为它更大,但是结构在那里。谢谢,谢谢!我还用字典思考了一下首字母。但是我不明白为什么这个实例不起作用。就我所见,它应该是有效的,而且比为每个字段创建字典要好。。你知道为什么这个实例不起作用吗?在这种情况下,我的猜测是,当您向tableform提供一个用户模型的实例时(需要一个tableform模型),它失败了。不过,这是我最初的假设,可能不正确!:)我猜完全正确!!我已经尝试了tableform的一个实例。非常感谢。我花了几个小时试图弄明白为什么它不起作用。。很简单:p谢谢