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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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 adminNo 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!