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)

My 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():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 に答える