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'),
)