所以我想写下我的第一个"认真的" Web应用程序Python / Django。到目前为止,非常好,大部分时间都喜欢它,即使我仍然遇到非常愚蠢的问题,所以请耐心等待。
我尝试编写一个编辑某个模型的例程。我构建了一个ModelForm和一个简单的相应视图。该表单收集数据并正确显示,但我提交了任何更改,但未在与IntegerField
关联的choices
上进行验证。这很傻,但我被卡住了。
我的模特(相关部分):
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})
正如我所说的,这段代码加载数据OK,但是如果我尝试更改任何字段,则验证失败,告诉我来自" frete_por_conta"无效(返回"做出有效选择.0(或任何其他有效价值)不是可用选项之一" - 从葡萄牙语免费翻译)
据我了解,它不应该通过任何验证,因为它从模型中的choices
中选择了选项,但我显然遗漏了一些东西......
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
如果它是IntegerField
,则选项应该是整数,而不是字符串。
MOD_FRETE = (
(0, 'POR CONTA DO EMITENTE'),
(1, 'POR CONTA DO DESTINATARIO'),
)