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 añadir nueva línea (salto de línea) para mostrar una lista de algunas llaves foráneas.

Esto es lo que he hecho hasta ahora para romper una línea:

class CreatePost(models.Model):
    subject = models.CharField(max_length=99)
    desc = models.TextField(max_length=9000)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_post")

    def __str__(self):
        return format_html('ASUNTO: {} <br> DESCRIPCIÓN: {}  <br> Email: {}'.format(self.subject, self.desc, self.user.username))

para admin.py:

class CreatePostAdmin(admin.ModelAdmin):
    list_display = ('id', 'subject', 'desc')

    class Meta:
        model = models.CreatePost

class RespondToPostAdmin(admin.ModelAdmin):
    list_display = ('id', 'post', 'to', 'content')

    class Meta:
        model = models.RespondToPost

Estoy tratando con RespondToPostAdmin y obtengo un error con respecto al formato en el método especial __str__:

Tipo de excepción: IndexError
Valor de excepción:
Índice de reemplazo 1 fuera de rango para la tupla de argumentos posicionales

No estoy seguro de por qué, cualquier ayuda es apreciada. Si hay una mejor solución para formatear mi método especial __str__ y agregar saltos de línea, por favor sugiérame.

edit:

El modelo admin no está reconociendo el método format_post:

class RespondToPostAdmin(admin.ModelAdmin):
    list_display = ('id', 'format_post', 'to', 'content')

    class Meta:
        model = models.RespondToPost

    def format_post(self, obj):
        return 'ASUNTO: {} %s <br> DESCRIPCIÓN: {} %s <br> Email: {} %s <br> '.format(obj.post.subject, obj.post.desc, obj.post.user.username)

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con el código original en el método __str__ del modelo RespondToPost es que la tupla pasada a format_html tiene paréntesis adicionales a su alrededor, lo cual está provocando que el índice de reemplazo 1 esté fuera de rango. Aquí está el código corregido:

    def __str__(self):
        return format_html('ASUNTO: {} <br> DESCRIPCIÓN: {} <br> Correo electrónico: {} <br>', self.subject, self.desc, self.user.username)
    

    Respecto al método format_post en la clase RespondToPostAdmin, parece que la sintaxis de formateo de cadenas es incorrecta. Aquí está el código corregido:

    def format_post(self, obj):
        return 'ASUNTO: {} <br> DESCRIPCIÓN: {} <br> Correo electrónico: {} <br>'.format(obj.post.subject, obj.post.desc, obj.post.user.username)
    

    Esto debería permitir que el atributo list_display muestre correctamente la información del post formateada en la vista de administración de RespondToPost, incluyendo los saltos de línea.

Comments are closed.