Python django admin中的ForeignKey字段

Python django admin中的ForeignKey字段,python,django,django-forms,django-admin,Python,Django,Django Forms,Django Admin,用户模型中大约有150万个条目。因此,当我在django admin中使用它时,如果没有原始的\u id\u字段,那么当将所有条目作为外键的选择菜单加载时,就会产生问题。 是否有其他方法可以轻松加载或进行搜索 基本上,我有上面定义的这些模型,还有一个用户模型,在ProfileRecommendation模型中用作ForeignKey。因此,用户模型的数据库条目由大约1,50000个条目组成。我不想要这些外部字段的默认选择选项。相反,if可以过滤掉它们,只加载用户表中的几个条目。或者无论如何,我可

用户模型中大约有150万个条目。因此,当我在django admin中使用它时,如果没有原始的\u id\u字段,那么当将所有条目作为外键的选择菜单加载时,就会产生问题。 是否有其他方法可以轻松加载或进行搜索


基本上,我有上面定义的这些模型,还有一个用户模型,在ProfileRecommendation模型中用作ForeignKey。因此,用户模型的数据库条目由大约1,50000个条目组成。我不想要这些外部字段的默认选择选项。相反,if可以过滤掉它们,只加载用户表中的几个条目。或者无论如何,我可以让他们像自动完成建议一样搜索

管理员 models.py 我建议你使用

使用该软件包,您可以定义模型外部字段,如下所示:

from select2.fields import ForeignKey

class Author(models.Model):
  name = models.CharField(max_length=100)
  active = models.BooleanField()

class Entry(models.Model):
    author = ForeignKey(Author,
    limit_choices_to=models.Q(active=True),
    ajax=True,
    search_field='name',
    overlay="Choose an author...",
    js_options={
        'quiet_millis': 200,
    },
    on_delete=models.CASCADE)
在django admin中,这将使用ajax加载作者姓名,这应该比使用默认的admin ForeignKey字段快得多。另外,正如您从示例中看到的,您可以使用将选项限制为来过滤仅可供选择的所需值

如果不是django-select2-forms,您可以使用django autocomplete可用的任何其他软件包:


我尝试了列表中的一些,但django-select2-forms看起来最适合我。

请描述问题并询问清楚的问题基本上我有上述定义的这些模型,并且有一个用户模型用作ProfileRecommension模型中的外键。因此,用户模型的数据库条目由大约1,50000个条目组成。我不想要这些外部字段的默认选择选项。相反,if可以过滤掉它们,只加载用户表中的几个条目。或者无论如何,我可以让他们像自动完成的建议一样搜索。可能的重复
class ProfileRecommendation(models.Model):
    user = models.ForeignKey(User, related_name='recommendations')
    recommended_by = models.ForeignKey(User, related_name='recommended')
    recommended_on = models.DateTimeField(auto_now_add=True, null=True)
    recommended_text = models.TextField(default='')
from select2.fields import ForeignKey

class Author(models.Model):
  name = models.CharField(max_length=100)
  active = models.BooleanField()

class Entry(models.Model):
    author = ForeignKey(Author,
    limit_choices_to=models.Q(active=True),
    ajax=True,
    search_field='name',
    overlay="Choose an author...",
    js_options={
        'quiet_millis': 200,
    },
    on_delete=models.CASCADE)