我对Django有点陌生,但是能够找到我的问题的所有答案,除了这一个。
我想提交一个同时包含整数字段和文本区域字段的表单 因此,通过通常的表单提交,我能够从表单获取数据并使用form.cleaned_data保存表单
当我想更新相同的表单时,我检索了特定的表数据并将其加载到表单中以方便更改。
但是,当我尝试通过更改值来重新提交表单时,该表单正在发送的是我提供给表单而不是更改后的值的整数字段的先前数据。
但是它照常发送更新后的文本区域值。
这是检索数据并将其输入表单时的图像。 Before editing
这是在我编辑表单After editing
之后 我提交具有更新值的表单后,打印了request.post数据 它返回以前的值,而不是更新的值
<tr><th><label for="id_Number_of_existing_programmes">Number of existing programmes:</label></th><td>
<input type="number" name="Number_of_existing_programmes" value="5" required id="id_Number_of_existing_programmes"></td></tr>
这里的数字存储在值中,而不是存储在html标记中,通常是文本字段 像这样
<textarea name="Department_center" cols="40" rows="10" required id="id_Department_center">Like this</textarea>
我能想到的唯一解决方案是不馈入Integer字段的数据,而仅将文本类型的数据馈入表单。
还有其他选择吗?
Model.py代码
Number_of_existing_programmes = models.IntegerField()
在form.py内没有为该字段添加任何小部件,因此它是默认
class Criteria1_PhDForm(ModelForm):
class Meta:
model = m.Criteria1_PhD
exclude = ['Criteria1']
和views.py中的代码
用于加载已提交的数据
phd = f.Criteria1_PhDForm(instance=m.Criteria1_PhD.objects.get(Criteria1=criteria1_get))
request.post
phd = f.Criteria1_PhDForm(request.POST)
从db进行数据恢复是可以的,可以恢复正确的数据,但是当我重新提交数据时,它不会被更改
request.post不会获取更新的数据,但是在更新文本字段数据时,下一个代码照常工作
m.Criteria1_PhD.objects.filter(Criteria1=criteria1_get).update(**phd.cleaned_data)
任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
当我进行更多测试时,找到了问题的根源。
我正在使用具有相同字段名称的不同模型
像这样
class Criteria3_Major_projects(models.Model):
grade = models.IntegerField()
class Criteria3_Minor_projects(models.Model):
grade = models.IntegerField()
很显然,表单在这样的模板中采用了具有相同名称的字段
<td><input type="number" name="grade" value="547" required id="id_grade"></td>
,因此来自不同模型的所有字段都具有相同的名称,因此request.post谈论的是模板中该名称的最后一个字段的值
当该类型和名称的最后一个输入字段更新时,所有字段都将更新。
希望我的答案很清楚。