Usuário(a):LuciSantiago/Testes

Origem: Wikipédia, a enciclopédia livre.


É possível gera formulários automaticamente através dos modelos de dados. Veja como é simples, imagine o seguinte modelo definido em models.py:

from django.db import models

class Clientes(models.Model):
    sexoChoices = (('M', 'Masculino'),('F', 'Feminino'),)
    idcliente = models.AutoField(primary_key=True)
    nomecompleto = models.CharField('Nome',max_length=50)
    cpf = models.CharField('CPF',max_length=15)
    num_cnh = models.CharField('Numero CNH',max_length=20)
    idade = models.IntegerField('Idade')
    sexo = models.CharField('Sexo',max_length=1, default='M',choices = sexoChoices)
    rg = models.CharField('Numero RG',max_length=20)
    cep = models.CharField('Cep',max_length=10)
    rua = models.CharField('Rua',max_length=30)
    num = models.CharField('Numero',max_length=6)
    bairro = models.CharField('Bairro',max_length=30)
    cidade =models.CharField('Cidade',max_length=30)

Depois disso, temos que criar uma função no arquivo views.py para renderizar o nosso template que criaremos posteriormente para carregar o nosso formulário.

def cadastro_cli(request):
    return render(request,'cadastro_cli.html')

O próximo passo é criar o arquivo cadastro_cli.html e colocar a seguinte estrutura:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Cadastro</title>
</head>
<body>
    Aqui será redenrizado o formulário
</body>
</html>

Depois de feito isso, para gerar o formulário com base nos campos do nosso modelo que definimos em models.py, é necessário criar um arquivo forms.py que será responsável por determinar quais campos o nosso formulário irá ter. O nosso arquivo terá a seguinte estrutura:

from django import forms
from .models import Clientes

class ClientesForm(forms.ModelForm):
    class Meta:
        model = Clientes
        fields = "__all__"

Onde o fields são os campos que serão mostrado, nesse caso eu coloquei para mostrar todos os campos, mas você pode definir para mostrar apenas campos específicos, como por exemplo, eu quero exibir só o nome, cpf e sexo, lembrando que tem que ser o mesmo nome definido no modelo, veja o exemplo a seguir:

class ClientesForm(forms.ModelForm):
    class Meta:
        model = Clientes
        fields = ["nomecompleto", "cpf", "sexo"]

Depois de configurar o arquivo forms.py, o nosso formulário já pode ser renderizado sem a necessidade de fazer a parte visual dele com códigos html. Para isso, voltamos ao arquivo da views.py e modificamos o método cadastro_cli:

def cadastro_cli(request):
    form = ClientesForm()

    context = {
        'form': form
    }

    return render(request,'cadastro_cli.html',context)


Primeiro importamos o nosso formulário conforme a imagem acima, instanciamos o formulário na variável form e passamos ela por meio do context(por meio de chave-valor) e passamos o context através do render. Com isso, agora é só configurar o arquivo cadastro_cli.html, pois é lá que o nosso formulário será exibido, com isso utilizar o {{ form.as_p }} lá no template cadastro_cli.html , como podemos ver abaixo:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Cadastro</title>
</head>
<body>
    {{ form.as_p }}
</body>
</html>

Não se esqueçam de fazer as configurações no arquivo urls.py, façam da seguinte maneira:

from django.urls import path
from .views import cadastro_cli

urlpatterns = [
    path('', index, name='index'),
    path('cadastro', cadastro_cli, name='cadastrocli'),
]

Depois de importamos a nossa views e criado a nossa url de acesso, basta iniciar o servidos através do comando python manage.py runserver e acessar a url, teremos o seguinte resultado:


Viu como é simples criar um formulário com o Django?! A criação de formulários é uma das tarefas mais cansativos e o Django consegue renderizar tudo automaticamente poupando tempo de desenvolvimento.