es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Django admin: ¿cómo mostrar números con longitud fija?

Este es mi modelo:

from django.contrib.humanize.templatetags.humanize import intcomma

class Flow(models.Model):
    amount = models.DecimalField(max_digits=10, decimal_places=2)

    def df_amount(self):
        return '{intcomma(abs(self.amount)):>12}'
    df_amount.admin_order_field = 'amount'
    df_amount.short_description = 'amount'

En admin.py:

@admin.register(Flow)
class FlowAdmin(admin.ModelAdmin):
    list_display = (
        'df_amount',
    )

Para amount=2800, print(self.df_amount()) devuelve $ 2,800.00, pero en el panel de administración se muestra $ 2,800.00 y los espacios en el medio se reducen a solo un espacio, no como se esperaba.

Así que mi pregunta es ¿cómo puedo reservar los espacios en el medio del string en el panel de administración? ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para reservar los espacios en medio de la cadena en el panel de administración, puedes agregar el atributo allow_tags al método df_amount en models.py de la siguiente manera:

    def df_amount(self):
        return format_html('<pre>{0}</pre>', intcomma(abs(self.amount)).rjust(13))
    df_amount.admin_order_field = 'amount'
    df_amount.short_description = 'amount'
    df_amount.allow_tags = True
    

    Esto formateará la cadena como texto preformateado con una fuente de ancho fijo y reservará los espacios en el medio. El método rjust se utiliza para agregar relleno a la izquierda de la cadena para que tenga un ancho total de 13 caracteres, incluyendo las comas y el punto decimal. El atributo allow_tags se establece en True para permitir el formato HTML en el panel de administración.

Comments are closed.