Django добавляет новую строку (break line) для отображения списка некоторого внешнего ключа

Вот что я делал до сих пор для разрыва строки:

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('SUBJECT : {} <br/>  DESCRIPTION : {}  <br/> Email : {} <br/>', (self.subject, self.desc, self.user.username))

для 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

Я работаю с RespondToPostAdmin и получаю ошибку форматирования в методе string dunder:

Exception Type: IndexError
Exception Value:    
Replacement index 1 out of range for positional args tuple

я не уверен почему, любая помощь приветствуется, если есть лучшее решение для форматирования моей строки методом dunder для добавления линий разрыва/новых строк, пожалуйста, предложите мне

редактирование: модель admin не прослушивает метод format:

class RespondToPostAdmin(admin.ModelAdmin):
    list_display = ('id', 'format_post', 'to', 'content')
    class Meta:
        model = models.RespondToPost
    def format_post(self,obj):
        return 'SUBJECT :{}  %s <br/> DESCRIPTION : {} %s  <br/> Email : {} %s <br/> '.format(obj.post.subject, obj.post.desc, obj.post.user.username)'
    

Уберите лишние скобки вокруг аргументов.

def __str__(self):
    return format_html('SUBJECT : {} <br/>  DESCRIPTION : {}  <br/> Email : {} <br/>', self.subject, self.desc, self.user.username)

EDIT: вы смешиваете несколько вещей вместе...

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(
            "SUBJECT : {} <br/>  DESCRIPTION : {}  <br/> Email : {} <br/>", self.subject, self.desc, self.user.username
        )


@admin.register(CreatePost)
class CreatePostAdmin(admin.ModelAdmin):
    list_display = ("__str__", "format_post")

    def format_post(self, obj):
        return mark_safe(
            "SUBJECT :{} <br/> DESCRIPTION : {}  <br/> Email : {} <br/> ".format(
                obj.subject,
                obj.desc,
                obj.user.username,
            )
        )

покажет enter image description here

Вы можете использовать "str" из модели как элемент в методе list_display или format_post, как вы создали. format_html предпочтительнее, чем mark_safe. Документы об этом.

Вернуться на верх