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,
)
)
Вы можете использовать "str" из модели как элемент в методе list_display
или format_post
, как вы создали. format_html
предпочтительнее, чем mark_safe
. Документы об этом.