2013-09-20 28 views
0

我需要Django的that function之類的東西。Django的WordPress「is_admin」函數的模擬? (對於檢查位置,不是權限。)

原因:我爲管理員和其他頁面編寫單獨的配置文件。配置的自定義字段確定:

class Article(models.Model): 
    field = CustomField(config={'default': {}, 'admin': {}}) 

出於這個原因,我不能用我的插件擴展AdminTextareaWidget(低於當前的代碼部分)。或者我可以嗎?怎麼樣?

class CustomField(TextField): 
    def __init__(self, config, *args, **kwargs): 
     self.config = dict_merge(initial_config, config) 
     super(CustomField, self).__init__(*args, **kwargs) 
    def formfield(self, **kwargs): 
     ################################### 
     # need to check for admin page here 
     ################################### 
     defaults = {'widget': CustomWidget(self.config)} 
     defaults.update(kwargs) 
     return super(CustomField, self).formfield(**defaults) 

class CustomWidget(Textarea): 
    def __init__(self, config, attrs=None): 
     ######### 
     # or here 
     ######### 
     self.config = config 
     super(CustomWidget, self).__init__(attrs) 
+0

對不起,我誤解了你的問題。我將刪除我的答案,因爲它不涉及。那麼我想我不太理解你的問題。你如何使用CustomField? – jproffitt

+0

你是什麼意思爲「使用」?它只是像models.TextField ... – lampslave

+0

您澄清它。謝謝。我認爲你將不得不在視圖中執行自定義內容,在那裏你可以訪問當前的URL。因此,在初始化表單後,您可以更改小部件。我想你會需要在那裏做。 – jproffitt

回答

0

我想我找到了答案!
也許這是破解,但它的工作原理。

def formfield(self, **kwargs): 
    # kwargs contain a widget name in admin! At least in Django 1.5.4. 
    if 'widget' in kwargs and kwargs['widget'] is AdminTextareaWidget: 
     config = self.config['admin'] 
    else: 
     config = self.config['default'] 
    defaults = {'widget': CustomWidget(config)} 
    defaults.update(kwargs) 
    return super(CustomField, self).formfield(**defaults)