Skip to content

Instantly share code, notes, and snippets.

@gilsondev
Created August 8, 2012 16:43
Show Gist options
  • Save gilsondev/3296527 to your computer and use it in GitHub Desktop.
Save gilsondev/3296527 to your computer and use it in GitHub Desktop.
Mostrando como usar o Django Forms
# -*- coding: utf8 -*-
from django import forms
from .models import Foo, Bar, FooBar
class FooModelForm(forms.ModelForm):
# Essa classe vai usar a instrospecção para gerar o formulário
# baseado nos atributos da classe Foo
class Meta:
model = Foo
class BarModelForm(forms.ModelForm):
# Ele faz o mesmo acima, mas quando define atributos para essa classe que é
# com o mesmo nome de algum atributo do Model, e que usa um Field que encaixa com o
# tipo definido no Model, o que for declarado aqui, terá prioridade (ex.: label)
#
# O campo attr2 do Bar, será inserido no formulário também, mas irá usar o FormField padrão
# que o Django define. Na documentação mostra isso:
#
# https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#field-types
test = forms.CharField(label="Rotulo do campo", required=False)
class Meta:
model = Bar
class BarTermoUsoForm(forms.ModelForm):
test = forms.CharField(label="Rotulo do campo", required=False)
termo_uso = forms.BooleanField(label="Concordo com o termo de uso") # padrão dos fields é required=True
class Meta:
model = Bar
# -*- coding: utf8 -*-
from django.db import models
class Foo(models.Model):
attr1 = models.CharField(u"Atributo 01", max_length=30)
attr2 = models.IntegerField(u"Atributo 01")
class Meta:
db_table = 'foo'
def __unicode__(self):
return self.attr1
class Bar(models.Model):
test = models.CharField(u"Atributo 01", max_length=30)
attr2 = models.IntegerField(u"Atributo 01")
class Meta:
db_table = 'bar'
def __unicode__(self):
return self.test
@gilsondev
Copy link
Author

Na classe BarModelForm, você pode inserir um atributo chamado "other" por exemplo, e definir o Field do tipo Textarea. Ele não está no Model, mas ele é do form. Assim, você teria que pegar o valor dele, na view por exemplo, e fazer o que precisa com essa informação.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment