2010-09-07 25 views
2

我認爲這是最容易理解爲例:在Django管理員中是否可以根據組將模型分成子模型?

我有模型ImageImageType,地點和圖片都有一個確切的類型。 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) 

但除了具有冗餘代碼,完全違背了一個數據庫,在第一時間組織這些的目的。另一種選擇是丟失我的ImageImageType型號,併爲每種類型創建單獨的幾乎相同的表格(即ProfileImageGalleryImage),但情況更糟糕,因爲這需要用戶訪問配置文件,這對我而言幾乎打敗了CMS的目的。

有什麼辦法可以做到這樣嗎?

admin.site.register(Image, ImageAdmin, group_by='type') 

另外,如果這是不可能的,有沒有人有任何建議,我可以解決這個問題的其他方式? (例如,有沒有辦法在Python中動態創建基於數據庫的類?)

乾杯! 馬特

+0

沒有沒有,但你可以做的是增加與''上ModelAdmin' get_urls'方法一個新的URL,其將指向上,將設置相同的'ModelAdmin'類自定義更改列表視圖要使用的queryset,並覆蓋管理員'index.html'以更改默認管理應用程序列表頁面的外觀。 – 2010-09-07 19:07:08

+0

我不知道它是否解決了您的問題,或者您需要使用ImageType類實現哪些內容,但是如果您不知道它,請查看奇妙的photologue應用程序(https://code.google .com/p/django-photologue /),它允許從模板中舒適地控制尺寸等,而最終用戶仍然可以在管理員中更多地指定尺寸和更多內容! – 2010-09-07 19:50:42

回答

4

有一種方法。這涉及對一個(或兩個)類型的圖像使用proxy模型。然後,您可以爲兩者添加單獨的管理員。對於例如

# models.py 
class ProfileImage (Image): 
    class Meta: 
     proxy = True 

class GalleryImage (Image): 
    class Meta: 
     proxy = True 

這將避免創建新表格。您仍然會將所有數據存儲在與Image型號對應的表中。然後您可以爲這些代理註冊兩個不同的管理員。

# admin.py 
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) 
+1

謝謝。這並不是我所希望的,但它比我之前所做的要好得多,而且看起來好像它已經很好了。再次感謝! – Maaatt 2010-09-21 21:45:58

+0

'type'在哪裏設置? – jul 2012-12-11 13:09:20