Is_valid Modelform 失败
Is_valid fails for Modelform
所以我正在尝试编写我的第一个 "serious" 网络应用程序 Python/Django。到目前为止,非常好,大部分时间都很喜欢它,尽管我仍然遇到非常愚蠢的问题,所以请多多包涵。
我正在尝试编写一个程序来编辑某个模型。我构建了一个 ModelForm 和一个简单的对应视图。表单收集数据并正确显示,但我提交了任何更改,它无法验证与某些 choices
关联的 IntegerField
。这很愚蠢,但我被卡住了。
我的模型(相关部分):
class Fretes(models.Model):
MOD_FRETE = (
('0', 'POR CONTA DO EMITENTE'),
('1', 'POR CONTA DO DESTINATARIO'),
)
frete_id = models.AutoField(primary_key=True)
remetente_id = models.IntegerField(blank=True, null=True)
destinatario_id = models.IntegerField(blank=True, null=True)
endereco_remetente_id = models.IntegerField(blank=True, null=True)
endereco_destinatario_id = models.IntegerField(blank=True, null=True)
frete_por_conta = models.IntegerField(blank=True, null=True, choices=MOD_FRETE)
criado = models.DateTimeField(auto_now_add=True)
modificado = models.DateTimeField(auto_now=True)
valor_frete = models.DecimalField(max_digits=9, decimal_places=2)
我的表格(相关部分):
class FretesForm(forms.ModelForm):
class Meta:
model = Fretes
fields = ['valor_frete','frete_por_conta','apolice']
我的观点(相关部分):
def mudaFrete(request, id):
frete = get_object_or_404(Fretes, pk=id)
if request.POST:
frete = FretesForm(request.POST, prefix='f1', instance=frete)
if frete.is_valid():
frete_salvo = frete.save()
msg_erro = "FORM SALVO!"
else:
msg_erro = "ERRO AO TENTAR SALVAR FORM!"
return render(request,"templates/mudafrete.html",
{'frete' : frete,
'msg_erro' : msg_erro })
else:
fFrete = FretesForm(prefix="f1", instance=frete)
return render(request,"template/mudafrete.html",
{'frete' : fFrete})
正如我所说,这段代码可以正常加载数据,但是如果我尝试更改任何字段,它会验证失败,告诉我来自 "frete_por_conta" 的值无效(它 returns "Make a valid choice. 0 (or any other VALID value) is not one of the available choices" - 从葡萄牙语自由翻译)
据我所知,它不应该使任何验证失败,因为它从模型中的 choices
中选择了选项,但我显然遗漏了一些东西...
如有任何帮助,我们将不胜感激!谢谢!
如果是 IntegerField
,选择应该是整数,而不是字符串。
MOD_FRETE = (
(0, 'POR CONTA DO EMITENTE'),
(1, 'POR CONTA DO DESTINATARIO'),
)
所以我正在尝试编写我的第一个 "serious" 网络应用程序 Python/Django。到目前为止,非常好,大部分时间都很喜欢它,尽管我仍然遇到非常愚蠢的问题,所以请多多包涵。
我正在尝试编写一个程序来编辑某个模型。我构建了一个 ModelForm 和一个简单的对应视图。表单收集数据并正确显示,但我提交了任何更改,它无法验证与某些 choices
关联的 IntegerField
。这很愚蠢,但我被卡住了。
我的模型(相关部分):
class Fretes(models.Model):
MOD_FRETE = (
('0', 'POR CONTA DO EMITENTE'),
('1', 'POR CONTA DO DESTINATARIO'),
)
frete_id = models.AutoField(primary_key=True)
remetente_id = models.IntegerField(blank=True, null=True)
destinatario_id = models.IntegerField(blank=True, null=True)
endereco_remetente_id = models.IntegerField(blank=True, null=True)
endereco_destinatario_id = models.IntegerField(blank=True, null=True)
frete_por_conta = models.IntegerField(blank=True, null=True, choices=MOD_FRETE)
criado = models.DateTimeField(auto_now_add=True)
modificado = models.DateTimeField(auto_now=True)
valor_frete = models.DecimalField(max_digits=9, decimal_places=2)
我的表格(相关部分):
class FretesForm(forms.ModelForm):
class Meta:
model = Fretes
fields = ['valor_frete','frete_por_conta','apolice']
我的观点(相关部分):
def mudaFrete(request, id):
frete = get_object_or_404(Fretes, pk=id)
if request.POST:
frete = FretesForm(request.POST, prefix='f1', instance=frete)
if frete.is_valid():
frete_salvo = frete.save()
msg_erro = "FORM SALVO!"
else:
msg_erro = "ERRO AO TENTAR SALVAR FORM!"
return render(request,"templates/mudafrete.html",
{'frete' : frete,
'msg_erro' : msg_erro })
else:
fFrete = FretesForm(prefix="f1", instance=frete)
return render(request,"template/mudafrete.html",
{'frete' : fFrete})
正如我所说,这段代码可以正常加载数据,但是如果我尝试更改任何字段,它会验证失败,告诉我来自 "frete_por_conta" 的值无效(它 returns "Make a valid choice. 0 (or any other VALID value) is not one of the available choices" - 从葡萄牙语自由翻译)
据我所知,它不应该使任何验证失败,因为它从模型中的 choices
中选择了选项,但我显然遗漏了一些东西...
如有任何帮助,我们将不胜感激!谢谢!
如果是 IntegerField
,选择应该是整数,而不是字符串。
MOD_FRETE = (
(0, 'POR CONTA DO EMITENTE'),
(1, 'POR CONTA DO DESTINATARIO'),
)