我有一个带有ManyToManyField的模型:
class WordList(models.Model):
words = models.ManyToManyField('Word')
这些WordList
对象应该通过选择单词从管理员创建(WordList
的大小可以不同,但一般来说,每个{{1}应该有大约10-20个单词1}})默认情况下,Django管理员使用WordList
来呈现MultipleChoiceField
字段的控制权。
它有两个问题。
ManyToMany
个对象的数量大约是 100000 ,当我尝试在admin中编辑Word
对象时 - 我的开发服务器上加载大约需要10秒钟这页纸。显然,几乎所有的时间都是由SELECT * FROM" app_word"来完成的。这很糟糕,我想加速它至少1-3秒。WordList
。我尝试使用[django-easy-select2] [https://github.com/asyncee/django-easy-select2]使用select2.js将搜索添加到ModelChoiceField,但它的工作速度非常慢,浏览器开始吃掉所有RAM和CPU。请帮忙。谢谢。
P.S。我正在使用PostgreSQL
答案 0 :(得分:1)
根据文件:
默认情况下,管理站点中会显示一个ManyToManyField 选择多个。但是,多选框可能很难 选择多个项目时使用。将ManyToManyField添加到此列表中 而是使用一个漂亮的不引人注目的JavaScript“过滤器”界面 允许在选项中进行搜索。
在你的代码中你会这样做:
class WordListAdmin(admin.ModelAdmin):
filter_horizontal = ('words',)