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?
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?
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?
Atualmente temos a seguinte saída:
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:
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!