带有 ManyToMany 字段和 500,000 个对象的 Django 表单超时

2024-04-30

假设我有一个名为“Client”的模型和一个名为“PhoneNumbers”的模型

class PhoneNumbers(models.Model):
    number = forms.IntegerField()

class Client(models.Model):
    number = forms.ManyToManyField(PhoneNumbers)

客户端与 PhoneNumbers 具有多对多关系。 PhoneNumbers 中有近 500,000 条记录,因此当使用 M2M 字段附带的 MultiSelect 小部件从模型表单编辑客户记录时,需要很长时间才能加载。事实上,它永远不会。它只是坐在那里尝试加载我假设的所有电话对象。

我的解决方法是使用 ajax 和 jquery 进行一些繁琐的操作,仅编辑客户记录中的电话号码。在浪费时间做所有这些之前,我想看看是否有另一种方法可以在不让我的页面挂起的情况下完成它。


您需要为此字段创建一个自定义小部件,以便您自动完成正确的记录。如果您不想自己推出:http://django-autocomplete-light.readthedocs.io/ http://django-autocomplete-light.readthedocs.io/

我将其用于通用关系支持,M2M 自动完成看起来也非常简单和直观。请参阅此处的使用视频:

在阅读了您关于在管理员之外需要它的评论后,我又看了一眼django-autocomplete-light图书馆。它提供了您可以在管理员之外使用的小部件 http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html#using-autocompletes-outside-the-admin.

from dal import autocomplete
from django import forms

class PersonForm(forms.ModelForm):
    class Meta:
        widgets = {
            'myformfield': autocomplete.ModelSelect2(
                # ...
            ),
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 ManyToMany 字段和 500,000 个对象的 Django 表单超时 的相关文章

随机推荐