2012-12-21 94 views
3

有时,不希望显示布尔型字段的“开/关”图标。在Django中禁用布尔型字段的开/关图标

例子:

  • error字段显示一个快乐的绿色的“OK”图标时,有一个错误
  • blocked=True显示为绿色的“OK”,而blocked=False为“禁止入内”的迹象。

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

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

+0

不知道我是否理解你的问题。您能否以一个真实的例子来详细说明。 – andrefsp

+0

想象一下'User'模型,它有一个字段'is_blocked'。默认管理小部件在用户被阻止时显示_green_图标,在用户未被阻止时显示_red_图标。这是违反直觉的。 –

回答

9

没有DIR tiness在使用此代码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=True,然后return not obj.is_blocked将返回False显示为您所需的红色图标。

编辑

如果你想使用的话True/False而不是红色/绿色的图标,你可以在上面的代码中设置

is_blocked_col.boolean = False

+0

是的,这很有道理。这个想法是,在yes/no图标不好的情况下,True/False字符串并不好。所以自定义方法是不可避免的。添加'admin_order_field',这样仍然可以排序,我会接受你的回答。 –

+0

@AntonyHatchkins我已经更新了我的答案。我也测试了它,并且每件事都按要求运作。谢谢 –

0

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

可以看到这些链接: On/Off ButtonIOS ButtonsSwitch ButtonsCSS3 Buttns

我觉得它太容易使用其中的任何

GOOD LUCK REGARDS

穆罕默德

+0

我不需要额外的功能,只是相反我想禁用开/关图标,只留下'True' /'False'消息。 –

+0

当你有额外的功能..你可以选择其中之一 – Mohammad

+0

我甚至可以显示一个狗大声叫'是'和一只猫喵喵'不'。但那不是我需要的。我需要'真实'/'假'行为,我希望这不会是一件大事。 –

0

我检查了对口onding 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或东西(这我不知道如何实现)

+0

你检查了我的答案吗? –

相关问题