Django有效表格不保存

时间:2014-04-18 10:35:42

标签: django django-forms

我目前在django工作,现在我被困住了。我有一个已经过验证但仍未保存的表单,或者在我的情况下没有任何数据。

forms.py

class ConfirmForm(forms.ModelForm):

        c_no = forms.CharField(label="c_no", widget=forms.HiddenInput)

        helper=FormHelper()
        helper.form_method = 'Post' 
        helper.layout = Layout(

            Field('c_no'),



            Div(ButtonHolder(Button('cancel','Close', data_dismiss="modal", css_class='btn-default'),
                       Submit('yes', 'Yes', css_class='btn-success'),
                       Submit('no', 'No', css_class='btn-danger')

                                    ),
                       css_class='modal-footer')    
               )     
        class Meta:
            model = Complaint
            fields = ['c_no']

Views.py

elif 'yes' in request.POST:
                    rform = ConfirmForm(request.POST)
                    if rform.is_valid():
                            a = rform.save(commit=False)
                            c_no = a.c_no
                            b = Complaint.objects.get(c_no=c_no)
                            b.status = 3
                            b.save()
                            c = {}
                            c.update(csrf(request))

                            return HttpResponseRedirect('/')

models.py

class Complaint(models.Model):
   c_no = models.AutoField(primary_key =True)
   Email = models.EmailField()
   Type = models.TextField()
   block = models.TextField()
   pub_date = models.DateTimeField(auto_now_add=True)
   location = models.TextField()
   description = models.TextField()
   status = models.IntegerField(default=0)

   def __unicode__(self):
      return unicode(self.c_no)

Django POST数据:

yes     u'Yes'
c_no    u'28'

Django局部变量:

a   <Complaint: None>
c_no    None
rform   <register.forms.ConfirmForm object at 0xb281d34c>

正如您所看到的,rform正在获取数据,但a和c_no变量没有得到任何结果。这意味着rform已经过验证但没有获取数据。 我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

a = rform.save(commit=False)

commit=False表示“嘿表单,更新模型实例但实际上还没有将它保存在数据库中,在保存它之前我还有一些事情要做”。当您将commit=False传递给表单的save方法时,有责任稍后致电a.save() - 在您的情况下,它似乎不是您的'重新修改a实例,所以我不知道为什么你首先有commit=False。由于a.c_noAutoField,因此在保存a实例之前不会填充它,但是您明确禁止表单保存它,而您自己也不会保存它。

参考:https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#the-save-method