如何在 Django 管理员 ListView 中将 True 值更改为绿色检查

Posted

技术标签:

【中文标题】如何在 Django 管理员 ListView 中将 True 值更改为绿色检查【英文标题】:How to change True value into green check in the Django admin ListView 【发布时间】:2019-12-18 11:50:32 【问题描述】:

models.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

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

【问题讨论】:

【参考方案1】:

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

def image_tag(self):
    return bool(self.main_image)
image_tag.boolean = True

(这已记录在案,但无法链接到确切位置:请参阅list_display 部分的大约一半。)

【讨论】:

我看到了很好的解决方案,那么它如何识别真假?如果是 False 则设置为 False,如果为 True 则设置为 true。 我不明白你的问题。这就是它的作用。 上面的代码只有在它为真时才起作用——如果它是假的,我需要该代码也显示红十字,我已经更新了问题。 更新了答案;你的方法应该总是返回一个布尔值,而不是无。

以上是关于如何在 Django 管理员 ListView 中将 True 值更改为绿色检查的主要内容,如果未能解决你的问题,请参考以下文章

Django admin listview 自定义列名

如何从 Django generic.ListView 中的用户前端获取参数?

如何在ListView中正确使用get_context_data来获取Django中的相关实例

Django Admin Cookbook-14如何在Django Admin后台移除“删除所选”操作

Django ListView - 过滤和排序的表单

Django:在 DataTables、ListView 中显示图像