Django admin filter_horizontal
設置爲編輯多對多關係提供了一個很好的小部件。但是這是一個特殊的設置,需要一個字段列表,所以它只能在定義ManyToManyField
的(管理員)模型上可用;我怎麼能在其他模型(管理員)上獲得相同的小部件,向後讀取關係?如何在Django Admin中訪問ManyToManyField的兩個方向?
我的模型看起來像這樣(隨意忽略User
/UserProfile
併發症,它的實際使用情況,雖然):
class Site(models.Model):
pass
class UserProfile(models.Model):
user = models.OneToOneField(to=User,unique=True)
sites = models.ManyToManyField(Site,blank=True)
我可以得到管理員表單上一個漂亮的小部件的UserProfile
與
filter_horizontal = ('sites',)
但無法看到如何獲得管理員的等效Site
管理員。
我還可以通過添加內嵌到SiteAdmin
得到部分的方式,定義爲:
class SiteAccessInline(admin_module.TabularInline):
model = UserProfile.sites.through
這是迂迴和不方便雖然;對於簡單管理多對多關係來說,小部件根本不是直觀的。
最後,還有一招described here這涉及對Site
定義另一個ManyToManyField
並確保它指向同一個數據庫表(並通過一些箍跳,因爲Django是不是真的旨在對描述相同的不同車型不同領域數據)。我希望有人能給我更清潔的東西。
非常感謝! :-D – Neal 2013-01-24 19:28:18