我目前在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已经过验证但没有获取数据。 我在这里做错了吗?
答案 0 :(得分:0)
a = rform.save(commit=False)
commit=False
表示“嘿表单,更新模型实例但实际上还没有将它保存在数据库中,在保存它之前我还有一些事情要做”。当您将commit=False
传递给表单的save
方法时,您有责任稍后致电a.save()
- 在您的情况下,它似乎不是您的'重新修改a
实例,所以我不知道为什么你首先有commit=False
。由于a.c_no
是AutoField
,因此在保存a
实例之前不会填充它,但是您明确禁止表单保存它,而您自己也不会保存它。
参考:https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#the-save-method