我正在使用Django 1.8.8
。
我有很多模型定义如下:
class MainModel(models.Model):
value = models.IntegerField(null=False, editable=True, default=20)
dt_modified = models.DateTimeField(null=True, auto_now=True)
class MyModel1(MainModel, models.Model):
name = models.CharField(null=False, editable=False, max_length=50)
class MyModel2(MainModel, models.Model):
foo = models.CharField(null=False, editable=False, max_length=50)
我的管理页面目前正在设置,
class MyModelAdmin(admin.ModelAdmin):
list_display = ('value', 'dt_modified')
search_fields = ['value']
date_hierarchy = 'dt_modified'
models = [MyModel1, MyModel2]
admin.site.register(models, MyModelAdmin)
我想按如下方式设置管理页面:
首页上有一个链接/admin
," MainModels"它将我引导到另一个页面,我可以从MyModel
的所有派生模型的列表中进行选择,即[MyModel1, MyModel2, ....MyMoneyN]
,它允许我编辑所选的派生模型。 MyModel#
。
上面代码的问题是它为每个编号模型创建了一个顶级链接。
答案 0 :(得分:1)
您需要自己的更改列表才能执行此操作:
class MyChangeList(ChangeList):
def url_for_result(self, result):
link = your_function_to_create_link()
return link
然后在Changelist
中使用ModelAdmin
:
class MyModelAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return MyChangeList
答案 1 :(得分:1)
您最好使用Grapelli或其他自定义管理员替代品。您可以使用不同的模型集设置自定义页面,默认情况下调整隐藏/显示等。尝试使用vanilla admin执行此操作将会出现问题。
这是一个与你想用grappelli
做什么接近的例子from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from grappelli.dashboard import modules, Dashboard
class MyDashboard(Dashboard):
def __init__(self, **kwargs):
Dashboard.__init__(self, **kwargs)
# append an app list module for "Applications"
self.children.append(modules.AppList(
title=_('Applications'),
column=1,
css_classes=('grp-collapse grp-closed',),
collapsible=True,
exclude=('django.contrib.*',),
))