O código abaixo mostra uma maneira simples de formatar números decimais (float) para a moeda brasileira: Real. É um exemplo simples que o método retorna uma string no formato R$ X.XXX,XX.
def moeda_brasileira(numero): """ Retorna uma string no formato de moeda brasileira """ try: contador = 0 preco_str = '' num = numero.__str__() if '.' in num: preco, centavos = num.split('.') else: preco = num centavos = '00' tamanho = len(preco) while tamanho > 0: preco_str = preco_str + preco[tamanho-1] contador += 1 if contador == 3 and tamanho > 1: preco_str = preco_str + '.' contador = 0 tamanho -= 1 tamanho = len(preco_str) str_preco = '' while tamanho > 0: str_preco = str_preco + preco_str[tamanho-1] tamanho -= 1 return "R$ %s,%s" % (str_preco, centavos) except: return 'Erro. Nao foi possivel formatar.' class Produto(models.Model): modelo = CharField(max_length=100) preco = DecimalField(max_digits=10,decimal_places=2) def __unicode__(self): return self.modelo def getPrecoFormatado(self): p = str(self.preco) if p != 'None': preco = moeda_brasileira(p) return preco else: return False getPrecoFormatado.short_description = 'Preço'
Exemplo de uso:
>>>produto = Produto.objects.get(id=1) >>>produto.getPrecoFormatado() 'R$ 1.290,00'









Posted in
Tags: 
Não sei se você conhece, mas existe o módulo locale, que já cuida disso:
>>> locale.setlocale(locale.LC_ALL,”pt_BR.UTF-8″)
‘pt_BR.UTF-8′
>>> locale.currency(123455667.22)
‘R$ 123455667,22′
>>> locale.currency(123455667.22, grouping=True)
‘R$ 123.455.667,22′
@João Marcus
Realmente não conhecia esse módulo. Parece que não pesquisei direito no google.
Obrigado pela dica!
Bom dia!
Só uma correção do seu código!
Se o valor for negativo, ele mostra: R$ -.300,00
CORREÇÃO:
if contador == 3 and tamanho > 1:
if int(preco) > 0:
preco_str = preco_str + ‘.’
contador = 0
Falo!