一个更好的Djangopipe理员ManyToMany字段小工具

我find了Django Admin的默认models.ManyToManyField小部件使用起来很麻烦。 这是HTML select元素,如果你有很多“其他”模型的对象,那么实际find你想要与“this”对象关联的“其他”对象是不切实际的。 如果你有很多 “其他”模型的对象,它甚至会减慢pipe理页面的渲染速度。

我知道,我可以build立自己的自定义pipe理小部件,并将其应用到我的ManyToManyFields ,但我有没有预先build立的那些,我可以使用? 在我的梦中,我画了一个自动完成的文本inputHTML小部件。 这在Djangopipe理框架中是否可行?

谢谢。

尝试在pipe理类中使用filter_horizontal属性,例如:

 class SomeModelAdmin(admin.ModelAdmin): filter_horizontal = ('users',) 

正如在文档中提到的 ,“将ManyToManyField添加到此列表将改为使用漂亮的不显眼的JavaScript”filter“界面,以允许在选项内进行search”。 filter_vertical使用稍微不同的布局来做同样的事情。

您可以尝试在pipe理员中使用原始ID。 和django文档: http : //docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields

如果你正在寻找自动完成的东西,你可能想看看这个作为一个起点http://code.djangoproject.com/wiki/AutoCompleteSolutions

最后是一个非常简单的内联示例:

models.py

 class SomeModel(models.Model): users = models.ManyToMany(User) 

admin.py:

 class SomeModelAdmin(admin.ModelAdmin): raw_id_fields = ("users",) 

我没有真的玩过,但是我发现这个看起来很有希望的图书馆在别处引用。

它似乎正是我想要的。 而不是加载相关对象的整个列表(不pipe有多less个!),并向您展示一个select器来select其中的几个,就像filter_horizontal一样,它将显示一个search/filter框,并使用typeahead / autocomplete调用来检索dynamic结果。 这对于有5000个用户并且希望在不等待5k <option>元素下载和渲染的情况下select3个或4个用户的情况是很好的。