2013-01-15 42 views
0

我有一張只有少量條目的表格,如果我可以使用內聯列表來代替強制員工每次點擊進入編輯頁面,那就好了。Django admin在默認列表頁面上內聯?

也就是說,當有人點擊通常給出模型對象列表的鏈接時,他們應該看到內嵌顯示的模型對象。

我想這樣的事情,但勿庸置疑,因爲沒有外鍵給出了一個錯誤:

class MyModelInline(admin.StackedInline): 
    model = MyModel    

class MyModelAdmin(admin.ModelAdmin): 
    inlines = [MyModelInline,]  

admin.site.register(MyModel, MyModelAdmin) 

回答

0

對於它爲你所描述你需要一個「編輯」模式是一個工作父數據。你想要顯示的所有行應該有一個外鍵給一個「編輯器」模型對象。所以,在models.py:

from django.db import models 

class Editor(models.Model): 
    pass 

class MyModel(models.Model): 
    name = models.CharField(max_length=100) # Field added for demonstration 
    # ... add any other fields you like ... 
    editor = models.ForeignKey(Editor) 

而且在admin.py:

from django.contrib import admin 
from Test.models import Editor, MyModel 

class MyModelInline(admin.StackedInline): 
    model = MyModel 

class EditorAdmin(admin.ModelAdmin): 
    inlines = [MyModelInline,] 
admin.site.register(Editor, EditorAdmin) 

一些其他的事情要考慮:

當你犯了一個新的爲MyModel()對象編程必須始終設置外鍵指向編輯器。您應該只有一個編輯器實例才能正常工作。使用管理界面時,應使用編輯器對象的管理頁面自動設置此外鍵。我建議限制創建和刪除編輯對象,除了自己在生產中。如果有人刪除了編輯器對象,那麼所有的MyModel對象也會消失。


替代方案:

1)如果管理人員在做編輯是簡單的話,我會建議implementing "actions"代替。

2)也有可能性overriding the admin template。我個人更喜歡這個選項,因爲每次Django更新時,我都必須檢查我的更改是否會干擾新功能。但是,有時候這是在管理界面中做更高級的事情的唯一方法。我已經在我自己的項目中完成了這項工作,但希望儘可能減少更改。

+0

謝謝,但是這不會給MyModel添加一個不必要的列嗎? (還有一些不必要的編輯器表格,但是這個表格可以接受,因爲它非常小。) – gabewb

+0

我添加了'名稱'字段用於演示目的。你的代碼中不需要它。我只是想把一些東西放在'MyModel'類中,以確保測試代碼的工作。 –