Django表单,具有500000个对象的多个字段超时
比如说,我有一个名为“客户机”的模型和一个名为“电话号码”的模型 客户机与电话号码有很多关系。PhoneNumbers中有将近500000条记录,因此,当使用M2M文件附带的MultiSelect小部件从模型表单编辑客户记录时,需要花费很长时间才能加载。事实上,它从来没有。它只是坐在那里试图加载我假设的所有手机对象Django表单,具有500000个对象的多个字段超时,django,django-forms,Django,Django Forms,比如说,我有一个名为“客户机”的模型和一个名为“电话号码”的模型 客户机与电话号码有很多关系。PhoneNumbers中有将近500000条记录,因此,当使用M2M文件附带的MultiSelect小部件从模型表单编辑客户记录时,需要花费很长时间才能加载。事实上,它从来没有。它只是坐在那里试图加载我假设的所有手机对象 我的解决方法是使用ajax和jquery完成一些繁琐的工作,只编辑客户机记录中的电话号码。在把时间浪费在这些事情上之前,我想看看是否有其他方法可以不让我的页面挂起 开箱即用,模型管理
我的解决方法是使用ajax和jquery完成一些繁琐的工作,只编辑客户机记录中的电话号码。在把时间浪费在这些事情上之前,我想看看是否有其他方法可以不让我的页面挂起 开箱即用,模型管理员有一个选项,可以让您的页面加载更快。但是,原始id字段的用户界面不是很直观,因此您可能必须推出自己的解决方案。您需要为此字段创建一个自定义小部件,以便自动完成正确的记录。如果您不想推出自己的: 我已经使用它的通用关系支持,M2M自动完成看起来非常简单和直观。请参见此处的使用视频: 在阅读了您关于在管理员之外需要它的评论后,我又看了一眼django autocomplete light库
我们使用此第三方小部件实现以下目的:
顺便说一句,您上面的“示例”是非常糟糕的DB设计,原因有很多。您应该在客户端模型中将电话号码作为文本字段,这样您就不会有这些问题了。;-) 自Django 2.0以来,Django Admin附带了一个为外键和多对多字段生成自动完成小部件的
class PhoneNumbersAdmin(admin.ModelAdmin):
search_fields = ['number']
class ClientAdmin(admin.ModelAdmin):
autocomplete_fields = ['number']
请注意,这当然只适用于Django admin的范围。要在管理员之外获取自动完成字段,您需要一个额外的包,如其他答案中已经建议的那样。是的,如果我只在管理员中需要它,那将是完美的。然而,我要求它是在一个模板以外的管理。非常感谢您的更新。我使用的是一个使用Django 1.3的modelformset_工厂,我认为它不允许通过“widget”kwarg,但我会尝试以某种方式实现,并让您知道结果。modelformset_工厂采用一个选项表单对象
myModelFormset=modelformset\u工厂(作者,form=AuthorForm)
请参阅:和
from dal import autocomplete
from django import forms
class PersonForm(forms.ModelForm):
class Meta:
widgets = {
'myformfield': autocomplete.ModelSelect2(
# ...
),
}
class PhoneNumbersAdmin(admin.ModelAdmin):
search_fields = ['number']
class ClientAdmin(admin.ModelAdmin):
autocomplete_fields = ['number']