Python django admin中的ForeignKey字段
用户模型中大约有150万个条目。因此,当我在django admin中使用它时,如果没有原始的\u id\u字段,那么当将所有条目作为外键的选择菜单加载时,就会产生问题。 是否有其他方法可以轻松加载或进行搜索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可以过滤掉它们,只加载用户表中的几个条目。或者无论如何,我可
基本上,我有上面定义的这些模型,还有一个用户模型,在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)