2010-09-11 39 views
5

在管理表單添加新實例的綠色加號按鈕,我多選場(組圖)消失,當我把它定義以我的形式。也就是說,刪除定義的行(照片= ...)會使加號出現。但是,爲了使用自定義Field/Widget,我需要弄清楚這一點。Django管理 - 如何添加綠色加號的許多一對多定製管理表單字段

class GalleryForm(ModelForm): 

    photos = ModelMultipleChoiceField(queryset=Photo.objects.all(), label="Photos") 

    def __init__(self, *args, **kwargs): 
     super(GalleryForm, self).__init__(*args, **kwargs) 

我在Django的源代碼偷看,它好像我有我的包裹部件在RelatedFieldWidgetWrapper,但我還沒有完全得到我的頭周圍。任何幫助是明智的!

回答

10

與lazerscience的幫助和這個post我結束了以下內容。

的的ModelAdmin:

class GalleryAdmin(admin.ModelAdmin): 

    form = GalleryForm 

    def __init__(self, model, admin_site): 
     self.form.admin_site = admin_site 
     super(GalleryAdmin, self).__init__(model, admin_site) 

我的形式:

class GalleryForm(ModelForm): 

    photos = ThumbnailChoiceField(queryset=Photo.objects.all(), label='Photos', widget=MyWidget(), required=False) 

    def __init__(self, *args, **kwargs): 
     super(GalleryForm, self).__init__(*args, **kwargs) 
     rel = ManyToOneRel(self.instance.photos.model, 'id') 
     self.fields['photos'].widget = RelatedFieldWidgetWrapper(self.fields['photos'].widget, rel, self.admin_site) 
+0

在Django的1.2拋出一個異常說,形式不具有'admin_site '屬性。難道我做錯了什麼? – orokusaki 2011-01-05 21:50:28

+0

@orokusaki有點太晚了(如後7年),但你可以試試:'從django.contrib.admin進口站點admin_site'所見[這裏](https://github.com/django/django/blob/ 9dc83c356d363c090f3351c908cad6f823aeb7bf /測試/ admin_inlines/tests.py#L9) – raratiru 2017-11-20 12:59:44

8

是的你是對的,你必須包裝你的部件與django.contrib.admin.widgets.RelatedFieldWidgetWrapper,結果有點複雜,因爲它期望當前的管理站點作爲初始化參數!也許你會發現這個post有幫助!

+0

謝謝,這工作:-) – Reimund 2010-09-12 11:59:55

相關問題