django prepopulate modelform - 没有任何反应

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语句的响应中,因此如果表单无效,页面应该重新加载并显示任何错误.

有关django文档的更多信息,请点击此处

我希望这有帮助!