我認爲這是最容易理解爲例:在Django管理員中是否可以根據組將模型分成子模型?
我有模型Image
和ImageType
,地點和圖片都有一個確切的類型。 ImageType
中的參數將調整圖像大小,縮略圖大小等,因爲照片庫圖像可能與配置文件圖片顯示不同。
我希望個人資料圖像和圖庫圖像在Django管理站點中以獨立模式顯示。一種選擇是做這樣的事情:
class ProfileImage (Image):
pass
class GalleryImage (Image):
pass
class ProfileImageAdmin (ImageAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
return qs.filter(type='profile')
class GalleryImageAdmin (ImageAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
return qs.filter(type='gallery')
admin.site.register(ProfileImage, ProfileImageAdmin)
admin.site.register(GalleryImage, GalleryImageAdmin)
但除了具有冗餘代碼,完全違背了一個數據庫,在第一時間組織這些的目的。另一種選擇是丟失我的Image
和ImageType
型號,併爲每種類型創建單獨的幾乎相同的表格(即ProfileImage
和GalleryImage
),但情況更糟糕,因爲這需要用戶訪問配置文件,這對我而言幾乎打敗了CMS的目的。
有什麼辦法可以做到這樣嗎?
admin.site.register(Image, ImageAdmin, group_by='type')
另外,如果這是不可能的,有沒有人有任何建議,我可以解決這個問題的其他方式? (例如,有沒有辦法在Python中動態創建基於數據庫的類?)
乾杯! 馬特
沒有沒有,但你可以做的是增加與''上ModelAdmin' get_urls'方法一個新的URL,其將指向上,將設置相同的'ModelAdmin'類自定義更改列表視圖要使用的queryset,並覆蓋管理員'index.html'以更改默認管理應用程序列表頁面的外觀。 – 2010-09-07 19:07:08
我不知道它是否解決了您的問題,或者您需要使用ImageType類實現哪些內容,但是如果您不知道它,請查看奇妙的photologue應用程序(https://code.google .com/p/django-photologue /),它允許從模板中舒適地控制尺寸等,而最終用戶仍然可以在管理員中更多地指定尺寸和更多內容! – 2010-09-07 19:50:42