已经提出的类似问题是针对数据字段的,例如Here和Here
但是如何将标题分成多行呢?
考虑一个具有如下模型和管理设置的 Django 应用程序:
模型.py
from django.db import models
class TaskItem(models.Model):
group = models.ForeignKey(TaskGroup, on_delete=models.CASCADE)
title = models.CharField(max_length=32, null=False, blank=False)
description = models.CharField(max_length=45, null=False, blank=False)
reward = models.IntegerField(default=1000, null=False, blank=False)
admin.py
class TaskItemAdmin(admin.ModelAdmin):
list_display=['title', 'group', 'reward']
list_filter=('group',)
如何将标题重命名为带有换行符的
Task Title
、Task Group
和 Task Reward
?
为了为标题提供自定义名称,您必须使用 显示装饰器。
像这样:
(我建议在您使用装饰器自定义的列中添加像
_
这样的前缀,以减少与未修改的列的混淆)
class TaskItemAdmin(admin.ModelAdmin):
list_display=['_title', '_group', '_reward']
list_filter=('group',)
@admin.display(description='Task Title')
def _title(self, obj):
return obj.title
@admin.display(description='Task Group')
def _group(self, obj):
return obj.group
@admin.display(description='Task Reward')
def _reward(self, obj):
return obj.reward
这会将标题外观自定义为我们刚刚编写的标题外观,但是如果您尝试在装饰器部分中使用
\n
换行符(例如 @admin.display(description='Task\nReward')
)或 HTML </br>
标签(例如 @admin.display(description='Task</br>Reward')
),您可能会发现它们都不起作用!这与 str.format() 类似,只不过它适合构建 HTML 片段。
所以你可以写这样的东西:
admin.py
class TaskItemAdmin(admin.ModelAdmin):
list_display=['_title', '_group', '_reward']
list_filter=('group',)
@admin.display(description=format_html('{}</br>{}', 'Task', 'Title'))
def _title(self, obj):
return obj.title
@admin.display(description=format_html('{}</br>{}', 'Task', 'Group'))
def _group(self, obj):
return obj.group
@admin.display(description=format_html('{}</br>{}', 'Task', 'Reward'))
def _reward(self, obj):
return obj.reward