如何為同一個模型創建一個以上的ModelAdmin,每個ModelAdmin進行不同的自定義并鏈接到不同的URL?假設我有一個稱為Posts的Django模型。默認情況下,此模型的admin視圖將列出所有Post對象。我知道我可以通過設置變量(如list_display)或queryset在ModelAdmin中覆蓋方法來以各種方式自定義顯示在頁面上的對象列表:class MyPostAdmin(admin.ModelAdmin): list_display = ('title', 'pub_date') def queryset(self, request): request_user = request.user return Post.objects.filter(author=request_user)admin.site.register(MyPostAdmin, Post)默認情況下,可以通過URL訪問/admin/myapp/post。但是我想擁有同一模型的多個視圖/ ModelAdmins。例如,/admin/myapp/post將列出所有帖子對象,并/admin/myapp/myposts列出屬于該用戶的/admin/myapp/draftpost所有帖子,并可能列出尚未發布的所有帖子。(這些只是示例,我的實際用例更加復雜)您不能為同一模型注冊多個ModelAdmin(這將導致AlreadyRegistered異常)。理想情況下,我希望不將所有內容放入單個ModelAdmin類中并編寫自己的“ urls”函數以根據URL返回不同的查詢集來實現此目的。我看了看Django的源代碼,發現ModelAdmin.changelist_view我的urls.py中可能包含這樣的函數,但是我不確定它是如何工作的。更新:我已經找到一種實現自己想要的方式(見下文),但是我仍然想聽聽其他實現方式。
3 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
保羅·斯通的答案是絕對好的!只需添加一下,對于Django 1.4.5,我需要繼承自定義類admin.ModelAdmin
class MyPostAdmin(admin.ModelAdmin):
def queryset(self, request):
return self.model.objects.filter(id=1)
添加回答
舉報
0/150
提交
取消