在Django Admin中,你如何级联InlineModelAdmin

时间:2011-04-28 13:14:56

标签: python django

您好我有一份餐馆名单(例如麦当劳等),菜单(例如午餐菜单,晚餐菜单),子菜单(例如开胃菜,Sandwidches等)和菜肴(安格斯汉堡,鸡肉汉堡等)

它们都是通过外键链接的。

有没有办法,所以在餐厅管理员,我有一个菜单作为表格内联,有一个链接去编辑该菜单(在它自己的管理页面,而不是内联),以便我可以在那里显示子菜单内联使用菜单管理员。每个子菜单都有一个链接来编辑该子菜单项(在它自己的管理页面中,而不是内联),以便我可以在线显示菜肴。

感谢。

2 个答案:

答案 0 :(得分:0)

如果您只想添加一些链接,例如在餐厅更改视图中,您实际上不需要使用内联,因为这提供了一个用于更改数据的表单。我可能会覆盖RestaurantAdmin中的change_view以获取相关菜单的列表并将其作为extra_context传递。然后覆盖模型特定的change_form.html模板以呈现菜单链接。

答案 1 :(得分:0)

所以你想在链接到每个菜单MenuInline的{​​{1}}添加字段吗?

可以使用read_only字段完成此操作。

首先,我会在您的菜单模型中添加一个方法,该方法会在管理员中创建指向模型change_form的链接。有关指示,请参阅Reversing admin URLs

你应该得到类似的东西:

change_form

现在,您可以将此方法添加到def get_menu_admin_page(self): from django.core.urlresolvers import reverse return '<a href="%s">%s</a>' % (reverse('admin:yourapp_menu_change', args=(self.pk,)), self.menu_title) get_menu_admin_page.allow_tags = True

InlineAdmin

现在,您的class MenuInline(admin.TabularInline): model = Menu fields = ('menu_title', 'get_menu_admin_page') readonly_fields = ('get_menu_admin_page',) 应包含指向每个菜单TabularInline的链接。