7

有时不希望为布尔字段显示“开/关”图标。

例子:

  • error当出现错误
  • blocked=True显示为绿色的“ok”,同时显示为blocked=False“禁止进入”标志。

在这种情况下,最好保留原始True/False行为。

有没有比创建一个返回例如self.error并添加short_description,ordering等的特殊方法更优雅的方法?

4

3 回答 3

12

使用此代码没有脏话admin.py

from mysite.models import Test
from django.contrib import admin

class TestAdmin(admin.ModelAdmin):
    list_display = ('is_blocked_col',)

    def is_blocked_col(self, obj):
        return not obj.is_blocked # invert the boolean value
    is_blocked_col.boolean = True
    is_blocked_col.admin_order_field = 'is_blocked'
    is_blocked_col.short_description  = 'Is Blocked'

admin.site.register(Test, TestAdmin)

如果您使用此方法,它仍会显示开/关图标。如果is_blocked=Truethenreturn not obj.is_blocked将根据您的需要返回False显示为红色图标的内容。

编辑

如果您想使用文字True/False而不是红色/绿色图标,您可以设置

is_blocked_col.boolean = False

在上面的代码中。

于 2012-12-23T18:50:12.880 回答
1

我检查了相应的 django 代码,不幸的是这种行为是硬编码的,所以唯一的解决方案是问题中提到的那个:

is_blocked = BooleanField(default=False)

def is_blocked_col(self):
    return self.is_blocked
is_blocked_col.short_description = \
is_blocked_col.admin_order_field = 'is_blocked'

这比类似的可读性差得多

is_blocked = BooleanField(default=False)
is_blocked.boolean = False

(这不起作用)

或强制管理小部件force_unicode或其他东西(我不知道如何实现)

于 2012-12-23T18:06:03.423 回答
0

我认为你可以通过 javascript 和 css 来设计你的模板。

你可以看到这些链接: 开/关按钮IOS按钮开关按钮CSS3按钮

我认为使用它们中的任何一个都太容易了

祝你好运

穆罕默德

于 2012-12-22T12:16:17.893 回答