對於它爲你所描述你需要一個「編輯」模式是一個工作父數據。你想要顯示的所有行應該有一個外鍵給一個「編輯器」模型對象。所以,在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更新時,我都必須檢查我的更改是否會干擾新功能。但是,有時候這是在管理界面中做更高級的事情的唯一方法。我已經在我自己的項目中完成了這項工作,但希望儘可能減少更改。
謝謝,但是這不會給MyModel添加一個不必要的列嗎? (還有一些不必要的編輯器表格,但是這個表格可以接受,因爲它非常小。) – gabewb
我添加了'名稱'字段用於演示目的。你的代碼中不需要它。我只是想把一些東西放在'MyModel'類中,以確保測試代碼的工作。 –