(Django 1.8)我有一个表与其他表有4对多的关系.其中两个表有很多条目,导致管理页面加载速度非常慢,因为它试图加载列表中的所有条目.有没有办法避免内部管理页面查询加载大表的所有条目,以加快管理页面加载?我认为最好的方法是只列出选定的值,但我不确定如何.
我不知道如何在这里使用limit_choices_to:
class Data(models.Model):
pass # stuff here
class Report(models.Model):
data= models.ManyToManyField(Data)
Run Code Online (Sandbox Code Playgroud)
我也尝试将此添加到我的admin.py但它根本没有帮助.出于某种原因,这不是限制性的:
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
if len(qs) > 10:
qs = qs[:10]
return qs
Run Code Online (Sandbox Code Playgroud)
如果您仍想使用limit_choices_to,请参阅文档.您基本上只是在字典对象中提供过滤器.
要加快管理,我的建议包括:
1.使用raw_id_fields在你的ModelAdmin.这为您提供了一个小搜索框而不是选择框,并避免了列出所有相关对象的开销.
2.如果要处理正向ForeignKey关系,也可以在ModelAdmin中使用list_select_related.在您的情况下,您正在处理多对多关系,因此您可以尝试覆盖ModelAdmin的get_queryset方法,并使用prefetch_related,如下面的代码所示.
from django.contrib import admin
class TestModelAdmin(admin.ModelAdmin):
def get_queryset(self, request):
test_model_qs = super(TestModelAdmin, self).get_queryset(request)
test_model_qs = test_model_qs.prefetch_related('many-to-many-field')
return test_model_qs
Run Code Online (Sandbox Code Playgroud)
如果你真的想亲自动手,我强烈建议你使用django-debug-toolbar.它确实让您可以查看正在运行的SQL语句的数量和内容.如果您可以阅读SQL,则可以推断出需要输入select_related和prefetch_related的内容.
| 归档时间: |
|
| 查看次数: |
4231 次 |
| 最近记录: |