django管理员更改列表中的ManyToManyField小部件?

django管理员更改列表中的ManyToManyField小部件?,django,autocomplete,django-admin,manytomanyfield,Django,Autocomplete,Django Admin,Manytomanyfield,在django管理员的变更列表中,我想使用list_editable来显示一个用于多个域的django自动完成小部件 我在这里发现了类似的东西: 通常,在列表显示中包含ManyToManyField会引发配置不当的异常,例如: “BookAdmin.list\u display[2]”,“author”是不受支持的ManyToManyField 我(可能是不明智地)从contrib/admin/validate.py中删除了3行,以绕过异常: 我现在让它吐出以下内容,接近(?)但没有雪茄 有没

在django管理员的变更列表中,我想使用list_editable来显示一个用于多个域的django自动完成小部件

我在这里发现了类似的东西:

通常,在列表显示中包含ManyToManyField会引发配置不当的异常,例如:

“BookAdmin.list\u display[2]”,“author”是不受支持的ManyToManyField

我(可能是不明智地)从contrib/admin/validate.py中删除了3行,以绕过异常:

我现在让它吐出以下内容,接近(?)但没有雪茄

有没有关于如何进行的想法?有没有更好的方法

以下是我目前拥有的:(AuthorAutocomplete在常规管理表单中运行良好)


谢谢!

这是一个老话题,但我希望这可能对其他人有所帮助

要获取多个字段的值以便显示它们的值,可以执行以下操作

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

我真傻。我以为William的manytomany_字段是一个内置的ModelAdmin对象。所以我按原样运行了他的代码(在join之后插入缺少的括号)

说来奇怪,它运行时没有产生错误消息。但是(没有)在我应该获取值时出现。我觉得奇怪的是,当我在谷歌上搜索“django model.Admin.manytomany_field”时找不到任何东西。哈


因此,最终我意识到我要用多对多字段的名称来代替多对多字段。这很有效!

糟糕的开发人员,糟糕的。永远,永远,永远,永远都不要更改Django源代码。我自己也没有尝试过这样做,但如果管理员应用程序明确禁止
多对多字段
,这是有原因的。有些地方是无法做到的在保存模型的过程中,它的功能是正确的。如果它是一个对你很重要的特性,考虑为它提交一个bug。否则,你可能就不走运了。修补Django源代码会给你和未来的代码继承者留下一个维护噩梦。
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