2012-12-21 142 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

你檢查了我的答案嗎? –

相關問題