2011-10-02 43 views
2

在django admin的更改列表中,我想使用list_editable爲ManyToManyField顯示一個django-autocomplete小部件。django admin更改列表中的ManyToManyField小部件?

我發現類似的東西在這裏:list_editable and widgets

通常包括list_display一個ManyToManyField引發ImproperlyConfigured例外,如:

「」 'BookAdmin.list_display [2]', '作者' 是不被支持ManyToManyField。」

I(也許不明智)除去從的contrib /管理/ validate.py 3線繞過例外。:)

我現在已經把它吐出了下面這個,它接近(?)但沒有雪茄。在0x1032a85d0 >

對如何進行任何想法

< django.db.models.fields.related.ManyRelatedManager對象?有沒有更好的方法來做到這一點?

這就是我目前所面對的:(AuthorAutocomplete在常規管理的形式工作的罰款)

class AuthorAutocomplete(AutocompleteSettings): 
    search_fields = ('first_name', 'last_name') 

class BookAdmin(AutocompleteAdmin, admin.ModelAdmin): 
    def get_changelist_form(self, request, **kwargs): 
     kwargs.setdefault('form', AuthorAutocompleteForm) 
     return super(BookAdmin, self).get_changelist_form(request, **kwargs)  
     list_display = ['isbn', 'title', 'author', 'publisher'] 
     #... 

class AuthorAutocompleteForm(forms.ModelForm): 
    class Meta: 
     model = Book 
    author = AuthorAutocomplete 

謝謝!

+4

壞開發者,壞。永遠不要永遠不要改變Django源代碼。我還沒有試圖自己做這件事,但是如果管理員應用程序明確禁止'ManyToManyFields',那麼有一個原因。某些地方在保存模型的過程中無法正常運行。如果這是對您來說很重要的功能,請考慮爲其提供一個錯誤。否則,你可能只是運氣不好。修補Django源代碼將爲您和任何可能在未來繼承您的代碼的可憐的開發人員創建維護夢魘。 –

回答

6

這是一個老話題,但我希望這可以幫助別人。

要獲取ManyToMany字段的值,以便顯示它們的值,可以執行以下操作。我以list_display爲例。

class TestAdmin(admin.ModelAdmin): 
    def get_some_value(self): 
     return ", " . join([x.__str__() for x in self.manytomany_field.all()]) 

    list_display(get_some_value) 
    get_some_value.short_description = 'Title' #sets column header to Title 
0

傻了我。我認爲William的manytomany_field是一個內置的ModelAdmin對象。所以我按原樣運行他的代碼(在加入後放入缺少的括號後)。

奇怪的是,它運行時沒有產生錯誤信息。但(無)在我應該得到價值時出現。我認爲奇怪的是,當我谷歌搜索「django model.Admin.manytomany_field」時,我找不到任何東西。哈!

因此,最終我意識到我要將多對多字段的名稱替換爲manytomany_field。有用!

相關問題