如何在 Django 管理 ListView 中将 True 值更改为绿色复选标记

Rad*_*dek 3 django admin django-models django-admin python-3.x

模型.py

class Example(models.Model):
    sort = models.PositiveIntegerField(default=0, blank=False, null=False)
    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField(editable=False)
    online = models.BooleanField(default=True)
    title = models.CharField(max_length=300, blank=True)
    slug = models.SlugField(max_length=255, blank=True, unique=True)
    main_image = models.ImageField(upload_to='images', blank=True)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        super().save(*args, **kwargs)

    def image_tag(self):
        if self.main_image:
            return True
        else:
            return False
Run Code Online (Sandbox Code Playgroud)

图片标签

正如您所看到的,如果您BooleanField在线,它会将 True 或 False 更改为绿色或红色。我怎样才能实现 - 当我的 ImageField 为空时它也会做同样的事情。我创建了一个image_tag返回 True 或 False 的方法,但不确定下一步该做什么 - 我是否需要覆盖模板 - 有没有办法做到这一点?

Dan*_*man 5

boolean正确的方法是在方法本身上设置属性。您还应该确保该方法始终返回布尔值。

def image_tag(self):
    return bool(self.main_image)
image_tag.boolean = True
Run Code Online (Sandbox Code Playgroud)

(这是有记录的,但无法链接到确切的位置:请参阅本list_display节的大约一半。)