【问题标题】:cleaned_data not picking up updated integer values from form in djangoclean_data 没有从 django 的表单中获取更新的整数值
【发布时间】:2019-03-09 20:17:06
【问题描述】:

我对 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>

我能想到的唯一解决方案是不将整数字段的数据提供给表单,而只将文本类型的数据提供给表单。

还有其他选择吗?

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)

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 这个问题不看你的代码是不可能回答的。 Django 非常有能力为整数字段发送更新的值,所以你正在做一些事情来防止它。
  • 从模式、表单和视图文件中添加了更多代码

标签: django


【解决方案1】:

在进行更多测试时找到了问题的根源。

我使用了具有相同字段名称的不同模型

喜欢这个

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 正在谈论模板中该名称的最后一个字段的值

当该类型和名称的最后一个输入字段更新时,所有字段都会更新。

希望我的回答很清楚。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2014-09-02
    • 2023-03-21
    • 1970-01-01
    • 2012-12-18
    • 2021-11-15
    • 2020-08-10
    • 2019-07-19
    相关资源
    最近更新 更多