2011-10-02 76 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。有用!

相关问题