在NestedTabularInline中使用ModelChoiceField的最佳实践及性能与数据回显问题求助
在NestedTabularInline中使用ModelChoiceField的最佳实践及性能与数据回显问题求助
各位大佬好,最近碰到个头疼的性能问题,想请教下大家有没有靠谱的解决方案:
最近我发现自己做的网页详情页加载速度特别慢,查了半天原因,终于定位到是NestedTabularInline里的ModelChoiceField搞的鬼——当这个字段关联的数据库实例数量特别大时,它会反复执行SELECT *的全表查询,直接把页面拖垮了。举个直观的例子:如果这个inline里有50个实例,就会触发50次全表查询,加载速度简直没法看。
我自己先试了几个办法:
- 一开始把这个ModelChoiceField的queryset设成
objects.none(),性能问题倒是解决了,但新问题又来了:编辑页面的时候,原本应该自动选中的关联数据完全没反应,根本回显不了。 - 后来我想着在表单的
__init__方法里动态设置初始值,结果因为queryset是空的,这个操作完全不起作用。
附上我用到的表单代码片段:
class CustomDuplicateItemInlineForm(forms.ModelForm): # extra fields action = forms.CharField( label='Action Duplicate', required=False, widget=DuplicateLinkWidget(), ) class Meta: abstract = True
想请教下各位大佬,在NestedTabularInline中使用ModelChoiceField时,有没有什么最佳实践能兼顾性能(避免大量重复查询)和数据回显(编辑时正常选中原有数据)呢?麻烦大家支支招,万分感谢!
备注:内容来源于stack exchange,提问作者Doan Van Thang
相关产品推荐
相关产品推荐

