2011-04-28 46 views
0

嗨我有一個餐廳列表(如麥當勞等),菜單(如午餐菜單,晚餐菜單),子菜單(如開胃菜,Sandwidches等)和菜餚(安格斯漢堡,雞肉漢堡等)在Django Admin中,你如何進行級聯InlineModelAdmin

它們都是通過外鍵鏈接的。

有沒有辦法,所以在餐廳管理員,我有菜單作爲表格內聯,與鏈接去編輯該菜單(在它自己的管理頁面,而不是內聯),以便我可以顯示子菜單內嵌菜單管理員。每個子菜單都有一個鏈接來編輯該子菜單項(在它自己的管理頁面中,不是內聯),以便我可以在線顯示菜餚。

THanks。

回答

0

如果您只是想添加一些鏈接,如在餐廳更改視圖中,您並不需要使用內聯,因爲這提供了更改數據的表單。我可能會覆蓋RestaurantAdmin中的change_view以獲取相關菜單的列表並將其作爲extra_context傳遞。然後重寫模型特定的change_form.html模板來呈現菜單鏈接。

0

所以你想添加字段到你的MenuInline鏈接到每個菜單的change_form

這可以使用read_only字段完成。

首先,我會在您的Menu模型中添加一個方法,該方法創建指向管理員中模型的change_form的鏈接。有些指針參見Reversing admin URLs

您應該結束了與此類似:

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應包含每個單獨的菜單鏈接到change_view

+0

如果您不想將get_menu_admin_page添加到您的模型中,您可以直接將其添加到InlineAdmin。檢查此:http://stackoverflow.com/questions/5249186/django-admin-tabularinline-is-there-a-good-way-of-adding-a-custom-html-column/5355985#5355985 – arie 2011-05-02 08:32:52