Django'ChoiceField'的替代形式,可处理数千条条目

Django'ChoiceField'的替代形式,可处理数千条条目,django,forms,widget,scalability,Django,Forms,Widget,Scalability,我有一张表格,里面有一个选择字段。它作为下拉框呈现给用户 问题是,我在这个字段中有数千个条目,这导致页面a加载非常缓慢,b缓慢 我想要一个替代的小部件,而不是Select,它可以处理10000多个选择 像管理员的raw\u id\u字段这样的东西如果在一般形式下可用就好了。。。但我对想法持开放态度。我不知道原始id字段是什么,但为什么不使用模型来存储所有选择 class Choice(models.Model): value = models.CharField() class MyM

我有一张表格,里面有一个选择字段。它作为下拉框呈现给用户

问题是,我在这个字段中有数千个条目,这导致页面a加载非常缓慢,b缓慢

我想要一个替代的小部件,而不是Select,它可以处理10000多个选择


像管理员的raw\u id\u字段这样的东西如果在一般形式下可用就好了。。。但我对想法持开放态度。

我不知道原始id字段是什么,但为什么不使用模型来存储所有选择

class Choice(models.Model):
    value = models.CharField()

class MyModel(models.Model):
    choice = models.ForeignKey(Choice)

例如,如果您希望一次只显示20个,那么选择它就很容易了。

我不知道原始id字段是什么,但为什么不使用模型来存储您的所有选择呢

class Choice(models.Model):
    value = models.CharField()

class MyModel(models.Model):
    choice = models.ForeignKey(Choice)

例如,如果您希望一次只显示20个,则可以很容易地选择它。

如果用户界面的选项是“自动完成”,则您可以查看:

支持使用jQuery UI自动完成小部件的应用程序 所需配置最少的ModelChoiceFields

编辑回复评论

我尚未测试此解决方案,但通过挖掘文档和源代码,似乎并不是所有数据都一次加载:

为小部件指定URL的功能使您能够连接到 如果您愿意,还可以使用其他更高级的自动完成查询引擎

:


如果用户界面的选项是“自动完成”,您可以查看:

支持使用jQuery UI自动完成小部件的应用程序 所需配置最少的ModelChoiceFields

编辑回复评论

我尚未测试此解决方案,但通过挖掘文档和源代码,似乎并不是所有数据都一次加载:

为小部件指定URL的功能使您能够连接到 如果您愿意,还可以使用其他更高级的自动完成查询引擎

:


基于这一评论,你应该在你的问题中包括:

让我澄清我的任务:我有10000个用户。我有一张表格 您可以选择一个用户。您需要能够选择您想要的任何用户。 你不能只加载20个,因为那样你就不能选择 其他9980名用户

如果您想要内置的东西,可以使用django.contrib.admin.widgets中的小部件,它会在您的选择上设置一个过滤器


您还应该查看10000个用户的结果,这样您就不会每次都点击数据库。这是导致实际性能问题延迟的原因,而不是用户数量太少。

基于此评论,您应该在问题中包括:

让我澄清我的任务:我有10000个用户。我有一张表格 您可以选择一个用户。您需要能够选择您想要的任何用户。 你不能只加载20个,因为那样你就不能选择 其他9980名用户

如果您想要内置的东西,可以使用django.contrib.admin.widgets中的小部件,它会在您的选择上设置一个过滤器


您还应该查看10000个用户的结果,这样您就不会每次都点击数据库。这是导致实际性能问题延迟的原因,而不是用户数量太少。

查看此小部件的jQuery演示,在我看来,它需要将所有选项都包含在HTML中。这并不能解决我的问题,因为在一个HTML页面中包含数千个用户名会使其加载速度非常慢。这并不能解决我的问题,因为在一个HTML页面中包含数千个用户名会使它的加载速度非常慢。我甚至不明白这是如何工作的。让我澄清我的任务:我有10000个用户。我有一个表单,您可以在其中选择一个用户。您需要能够选择您想要的任何用户。您不能只加载20个,因为这样您就无法选择其他9980用户。分页不是一个选项,因为必须滚动100多页的用户会很糟糕。好吧,我没有正确理解你的问题。所以我认为,伯翰的解决方案也许是一条可行之路。我不明白这到底是怎么回事。让我澄清我的任务:我有10000个用户。我有一个表单,您可以在其中选择一个用户。您需要能够选择您想要的任何用户。您不能只加载20个,因为这样您就无法选择其他9980用户。分页不是一个选项,因为必须滚动100多页的用户会很糟糕。好吧,我没有正确理解你的问题。所以我认为,伯翰的解决方案也许是一条可行之路。
$("#id_%(name)s_helper").autocomplete({
    source: function(request, response){
        $.ajax({                                  # <-- look here
            url: "%(url)s",
            data: {q: request.term},
            success: function(data) {