2

模型.py

class Produto(models.Model):
      uuid = models.CharField(max_length=50, primary_key=True, editable=False, default=gen_uuid)
      produto = models.CharField(max_length=100, unique=False, verbose_name="Item")

      class Meta:
            verbose_name = "Produto"
            verbose_name_plural = "Produtos"

class Item(models.Model):
      uuid = models.CharField(max_length=50, primary_key=True, editable=False, default=gen_uuid)
      tipo = models.CharField(max_length=100, null=False, blank=True, unique=False, verbose_name="tipo_mtr")

      class Meta:
            verbose_name = "Item"
            verbose_name_plural = "Itens"

class Orcamento(models.Model):
      uuid              = models.CharField(max_length=50, primary_key=True, editable=False, default=gen_uuid)
      quantidade        = models.IntegerField(max_length=10, unique=False, null=True, verbose_name="qtde")
      produto           = models.ForeignKey(Produto, verbose_name="Produto")
      tipo              = models.ManyToManyField(Item, verbose_name="Item")

      class Meta:
              verbose_name = "Orcamento"
              verbose_name_plural = "Orcamentos"
              unique_together     = ("produto", "uuid")

      def __unicode__(self):
         return unicode(self.produto)

我的 forms.py (OrcamentoForm)

class OrcamentoForm(ModelForm):
      tipo_id               = ModelMultipleChoiceField(queryset=Item.objects.all(), required=True, widget=SelectMultiple(attrs={"style":"width:500px",}), help_text="Coloque o Tipo de Medida - Requerido")
      quantidade            = IntegerField(label="Quantidade", required=True, help_text="Coloque a Quantidade - Requerido")
      produto_id            = ModelMultipleChoiceField(queryset=Produto.objects.all(), widget=SelectMultiple(attrs={"style":"width:500px",}), required=True, help_text="Escolha o Produto - Requerido")

      def __init__(self, *args, **kwargs):
        super(OrcamentoForm, self).__init__(*args, **kwargs)
        # without the next line label_from_instance does NOT work 
        self.fields['produto_id'].queryset = Produto.objects.all()
        self.fields['produto_id'].label_from_instance = lambda Produto: "%s" % (Produto.produto)

        self.fields['tipo_id'].queryset = Item.objects.all()
        self.fields['tipo_id'].label_from_instance = lambda Item: "%s" % (Item.tipo)

      class Meta:
          model = Orcamento
          fields = ["quantidade", "tipo_id", "produto_id" ]

我的观点.py

def orcamento(request):
        form = OrcamentoForm(request.POST or None, request.FILES or None)
        if request.method == 'POST':
               form.save()
               return render_to_response("webSite/teste.html", context_instance = RequestContext(request))
        else:
            return render_to_response("webSite/orcamento.html", {"form": form }, context_instance=RequestContext(request))

使用if form.is_valid():in 时views.py,不要将表单保存在表 mysql 中。

帮我 :(

4

4 回答 4

4

如果执行检查时未保存表单,form.is_valid()则表示该表单无效。在这种情况下,我们应该为每个字段显示表单发现的错误。为此,首先您应该将表单数据传递给模板,如果表单无效。

#views.py
def orcamento(request):
    form = OrcamentoForm(request.POST or None, request.FILES or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return render_to_response("webSite/teste.html", context_instance = RequestContext(request))
    #Following will run in all cases except when form was valid
    return render_to_response("webSite/orcamento.html", {"form": form }, context_instance=RequestContext(request))

您可以在模板中显示表单或字段错误引发的所有错误。详细了解见django文档

于 2013-09-13T13:41:40.443 回答
0

当我输入错误时发生了同样的 .is_valid()错误.is_valied()。您可能想检查是否是这种情况。

于 2019-08-31T02:18:56.887 回答
0

这个错误发生在我身上,但我通过在 is_valid 中添加括号解决了它,它变成了 is_valid() 并且错误消失了,再也没有回来

于 2021-11-24T05:49:21.967 回答
0

如果您从未包含().is_valid(). 拥有有效性检查器.is_valid:也会引发相同的错误。

于 2021-01-13T15:17:41.417 回答