2013-04-12 26 views
4

models.pyDjango管理秀場僅複選框是假

class Menu(models.Model): 

    ... 
    has_submenu=models.BooleanField(default=1) 
    page=models.ForeignKey(Page,null=True) 

我想Django管理顯示的頁面屬性僅has_submenu複選框是假的(所以Django的管理員必須寫一些JavaScript我:))

也許我必須擴展render_change_form方法

有什麼建議?

回答

6

我的回答:

class MenuAdmin(admin.ModelAdmin): 
... 
    class Media: 
     js = ('/static/admin/js/hide_attribute.js',) 

hide_attribute.js

hide_page=false; 
django.jQuery(document).ready(function(){ 
    if (django.jQuery('#id_has_submenu').is(':checked')) { 
     django.jQuery(".page").hide(); 
     hide_page=true; 
    }else 
    { 
     django.jQuery(".page").show(); 
     hide_page=false; 

    } 
    django.jQuery("#id_has_submenu").click(function(){ 
     hide_page=!hide_page; 
     if(hide_page) 
     { 
      django.jQuery(".page").hide(); 
     }else 
     { 
      django.jQuery(".page").show(); 
     } 
    }) 
}) 

我覺得這是一個簡單的答案

1

如何覆蓋上的ModelAdmin get_form方法,像這樣:

class MenuModelAdmin(admin.ModelAdmin): 
    def get_form(self, request, obj=None, **kwargs): 
     self.exclude = [] 
     if obj and obj.has_submenu: 
      self.exclude.append('page') 
     return super(MenuModelAdmin, self).get_form(request, obj, **kwargs) 

另外,請參見get_form docs

+1

這隻有我試圖編輯菜單偉大的.. 我想到.hide().show()這在飛行中(我試圖避免寫javascript) –

+0

@ChrisPappas,我明白你的意思。聽起來像你必須寫一些JS東西無論如何.. – alecxe

+0

我編輯我的答案檢查出來.. THX反正 –

1

您可以擴展Django管理模板。

只要按照這樣的結構:

整個項目:

templates/admin/change_form.html 

跨應用程序

templates/admin/<my_app>/change_form.html 

跨型號

templates/admin/<my_app>/<my_model>/change_form.html 

在你的情況,容貌就像你只需要擴展菜單模型一樣。 我會做到以下幾點:

  1. 抓住從Django的文件夾
  2. change_form.html teamplate對象循環中,尋找
  3. 健康檢查has_submenu決定是否顯示頁面屬性