def io_simulation(request):
form = SimForm(request.POST)
print('FIRST' + str(request.POST))
if form.is_valid():
form.save()
return render(request, 'App/simulation.html', {'title': 'Simulation'})
此视图函数显示我的 POST 数据已正确发送,但未到达我的数据库。这是打印语句的输出:
FIRST<QueryDict: {'csrfmiddlewaretoken': ['dzowQoB3lk2IOOc19QXQDPZ3soJaxglaP76cURfjB6GMU3VBkHDe7IDhIp2CPpyK'], 'sim_concentration_range': ['3'], ['3'], 'sim_range_concent'], 'sim_range2concent':
如果我使用 io_simulation 作为表单提交的操作,那么我会收到 NoReverseMatch 错误,并且我不会打印出我的 POST 数据。如果我使用这个其他函数作为操作:
def save_sim_data(request):
if request.method == 'POST':
request.POST.get('sim_concentration_range')
request.POST.get('sim_concentration_range_2')
request.POST.get('sim_concentration_range_unit')
data=Sim()
data.sim_concentration_range = request.POST.get('sim_concentration_range')
data.sim_concentration_range_2 = request.POST.get('sim_concentration_range_2')
data.sim_concentration_range_unit = request.POST.get('sim_concentration_range_unit')
data.save()
return render(request, 'nowhere.html')
else:
return render(request,'no/errors.html')
然后我确实看到我的 POST 数据被打印出来(并且它是正确的(在上面的块引用中输出)),但我的数据库中仍然没有任何内容。
我无法理解视图结构和调试。到底是怎么回事?
编辑:
表格.py:
class SimForm(forms.ModelForm):
sim_concentration_range = forms.DecimalField()
sim_concentration_range_2 = forms.DecimalField()
sim_concentration_range_unit = forms.ChoiceField()
class Meta:
model = Sim
fields = ('sim_concentration_range','sim_concentration_range_2','sim_concentration_range_unit')
模型.py
class Sim(models.Model):
sim_concentration_range = models.DecimalField(max_digits = 100, decimal_places = 5, default=1)
sim_concentration_range_2 = models.DecimalField(max_digits = 100, decimal_places = 5, default=1)
sim_concentration_range_unit = models.TextChoices('sim_cc_unit', 'ppm ')
解决方案的步骤
- 删除 forms.py SimForm 函数中但在 Meta 类之外的变量定义
class SimForm(forms.ModelForm):
class Meta:
model = Sim
fields = ('sim_concentration_range','sim_concentration_range_2','sim_concentration_range_unit')
- 将 models.py Sim 类中的 TextChoices 字段更改为 CharField
- 从 views.py 中删除了 save_sim_data 函数,并在其 html 中删除了表单的操作声明
- 更改 URL 模式以使用 io_simulation 视图
由于您使用的是 ModelForm,因此您不必覆盖这些字段。所以你可以这样输入:
class SimForm(forms.ModelForm):
class Meta:
model = Sim
fields = ('sim_concentration_range','sim_concentration_range_2','sim_concentration_range_unit')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句