Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单,具有500000个对象的多个字段超时_Django_Django Forms - Fatal编程技术网

Django表单,具有500000个对象的多个字段超时

Django表单,具有500000个对象的多个字段超时,django,django-forms,Django,Django Forms,比如说,我有一个名为“客户机”的模型和一个名为“电话号码”的模型 客户机与电话号码有很多关系。PhoneNumbers中有将近500000条记录,因此,当使用M2M文件附带的MultiSelect小部件从模型表单编辑客户记录时,需要花费很长时间才能加载。事实上,它从来没有。它只是坐在那里试图加载我假设的所有手机对象 我的解决方法是使用ajax和jquery完成一些繁琐的工作,只编辑客户机记录中的电话号码。在把时间浪费在这些事情上之前,我想看看是否有其他方法可以不让我的页面挂起 开箱即用,模型管理

比如说,我有一个名为“客户机”的模型和一个名为“电话号码”的模型

客户机与电话号码有很多关系。PhoneNumbers中有将近500000条记录,因此,当使用M2M文件附带的MultiSelect小部件从模型表单编辑客户记录时,需要花费很长时间才能加载。事实上,它从来没有。它只是坐在那里试图加载我假设的所有手机对象


我的解决方法是使用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']