3
respostas

List_display

Como faço para um campo, no list_display, sair com máscara? Por exemplo, o campo CPF em vez de sair 39812347687, sair assim 398.123.476-87?

3 respostas

Oi Fábio, como vai?

Você pode criar um método no modelo da sua classe(models.py) que irá formatar essa máscara para você. Temos um padrão de máscara a ser seguido, certo?

  • 3 números, um ponto, 3 números, um ponto, 3 números, um traço, 2 números.

Atualmente temos a seguinte saída:

foto1

Para formatar, podemos utilizar o seguinte trecho de código:

class Pessoa(models.Model):
    cpf = models.CharField(max_length=200)
    email = models.CharField(max_length=200)

    def cpf_formatado(self):
        return f'{self.cpf[0:3]}.{self.cpf[3:6]}.{self.cpf[6:9]}-{self.cpf[9:11]}'
    cpf_formatado.short_description = 'CPF' # nome da coluna que aparecerá no admin

No código acima pegamos a string e particionarmos a mesma, dividindo-a de acordo com o padrão do cpf.

E em admin.py, em list_display ao invés de colocarmos o nome do campo, colocamos a função que faz a formatação do mesmo. Por exemplo:

list_display = ('id', 'cpf_formatado', 'email')

Resultado:

image

Qualquer dúvida é só dizer, estou por aqui.

Abraços e bons estudos!

Muito obrigado pela ajuda!!! Sou iniciante em programação. Eu estava usando a função str. Assim, apenas aparecia no display de outros models.

   def __str__(self):
      mascara = CPF()
      return mascara.mask(self.cpf)

Fábio, a __str__ nesse caso é para dizermos como será a representação do objeto daquele modelo e quando utilizamos o list_display a __str__ não é levada em conta na tabela da página inicial. Porém, caso não fosse definido o list_display, daí sim seria exibido a representação __str__ daquele objeto na tabela. Como nesse caso definimos o list_display, se tornou necessário a criação de uma função auxiliar para personalizar o campo da forma como queríamos, como exemplificado na resposta acima.

Deixo para futuras consultas a documentação do django que aborda esse assunto (está em inglês, mas com o auxílio do tradutor do próprio navegador é possível compreender o texto):

E qualquer dúvida não hesite em postar aqui no fórum, estou a disposição, tá bom?

Grande abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software