无法更改,因为数据未验证。 (Django的)

时间:2013-09-13 12:59:26

标签: django validation django-forms

Models.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" ]

我的views.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():中有views.py,请不要在表mysql中保存表单。

帮助我:(

3 个答案:

答案 0 :(得分:3)

如果在执行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 documentation详细说明。

答案 1 :(得分:0)

当我调用.is_valid而不是.is_valied()时,发生了相同的错误。 您可能想检查是否是这种情况。

答案 2 :(得分:0)

如果您从未在 () 中包含 .is_valid(),也会发生此错误。将有效性检查器设为 .is_valid: 也会引发相同的错误。