正常情况下 models.BooleanField 类型字段在 django admin 后台 列表页面会自动显示 绿色勾 和 红色叉,如图:
有时候我们写模型的的时候写成了其他显示文案,如果只有两种状态时,又想显示成 绿色勾 和 红色叉,可以采用如下图所示代码快速实现:
class Resume(models.Model):
phone_status_choice = (
("1", "ON"),
('0', 'OFF'),
)
name = models.CharField(unique=True, max_length=48, verbose_name="用户名称")
phone = models.CharField(max_length=32, verbose_name="手机号码")
email = models.EmailField(max_length=128, null=True, blank=True, verbose_name="邮箱")
ip = models.GenericIPAddressField(null=True, blank=True, verbose_name="IP")
phone_order = models.IntegerField(default=0, verbose_name="序号", help_text="值越小,同分类中越靠前显示")
phone_status = models.CharField(max_length=32, choices=phone_status_choice, default="0FF", verbose_name="必定使用",
help_text="一定使用该号码")
phone_status_select = models.CharField(max_length=32, choices=phone_status_choice, default="ON",
verbose_name="上传使用",
help_text="上传文件时,IP 在范围之内才使用")
note = models.CharField(max_length=256, blank=True, null=True, verbose_name="备注")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
alter_time = models.DateTimeField(auto_now=True, verbose_name='最近修改时间')
class Meta:
# meta 是否固定?
# 设置的是后台显示表名 默认是类名
verbose_name = "手机号码"
# 是设置复数形式时显示的名称
verbose_name_plural = "手机号码列表"
def __str__(self):
return "%s" % self.name
def colored_phone_status(self):
return self.phone_status == "ON" or self.phone_status == "1"
colored_phone_status.boolean = True
colored_phone_status.short_description = "必定使用"
def colored_phone_status_select(self):
return self.phone_status_select == "ON" or self.phone_status_select == "1"
colored_phone_status_select.boolean = True
colored_phone_status_select.short_description = "上传使用"
但是,如果超过两种状态,其他状态就要自己使用 format_html 单独返回 icon,具体请看:https://xieboke.net/article/98/