models.py
class Menu(models.Model):
...
has_submenu=models.BooleanField(default=1)
page=models.ForeignKey(Page,null=True)
我希望django admin仅在has_submenu复选框为false时显示页面属性(所以django-admin必须为我写一些javascript :))
也许我必须扩展render_change_form
方法
有什么建议吗?
答案 0 :(得分:9)
我的回答:
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 :(得分: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。
答案 2 :(得分:1)
您可以扩展Django管理模板。
请遵循以下结构:
整个项目:
templates/admin/change_form.html
跨应用程序
templates/admin/<my_app>/change_form.html
跨模型
templates/admin/<my_app>/<my_model>/change_form.html
在您的情况下,看起来您只需要扩展菜单模型。 我会做以下事情: