pso*_*res 5 django instance django-forms
这一定是一件非常简单的事,但我似乎无法通过它.
我试图构建一个用户可以更新ModelForm的表单.首先,他插入一个用户ID,之后我想向他展示预先填充原始数据的表单,这样他就可以只更改他想要的字段.
在我的朋友google,stackoverflow和django文档的一些帮助之后,我来到这里:
views.py
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})
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
模板:
{{ form }} # presents the empty form and not the data from that user
Run Code Online (Sandbox Code Playgroud)
django的版本是1.4
任何人都可以告诉我有什么问题,以及为什么我无法看到填写的表格?
非常感谢你
Jef*_*_Hd 10
您需要定义一个用于初始数据的字典,并从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})
Run Code Online (Sandbox Code Playgroud)
我还将渲染放到if语句的响应中,因此如果表单无效,页面应该重新加载并显示任何错误.
我希望这有帮助!
归档时间: |
|
查看次数: |
8007 次 |
最近记录: |