用户模型中有大约1.5万个条目。因此,当我在没有raw_id_fields的django-admin中使用它时,在将所有条目作为外键的选择菜单加载时导致问题。 是否存在替代方式,以便可以轻松加载或可以搜索。
基本上我有上面定义的这些模型,并且有一个User模型在ProfileRecommendation模型中用作ForeignKey。因此,用户模型的数据库条目包含大约1,50,000个条目。我不想要这些外国字段的默认选择选项。相反,如果可以过滤掉它们并只加载用户表的几个条目。或者无论如何我可以使它们像自动完成建议一样可搜索
class ProfileRecommendationAdmin(admin.ModelAdmin):
list_display = ('user', 'recommended_by', 'recommended_text')
raw_id_fields = ("user", 'recommended_by')
search_fields = ['user__username', 'recommended_by__username', ]
admin.site.register(ProfileRecommendation, ProfileRecommendationAdmin)
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='')
答案 0 :(得分:1)
我建议您使用django-select2-forms
使用该软件包,您可以定义模型外部字段,如下所示:
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字段快得多。另外,从示例中可以看出,您可以使用 limit_choices_to 来仅过滤可供选择的所需值。
如果不是django-select2-forms,您可以使用任何其他可用于django自动填充的包:list of autocomplete packages here
我在列表中尝试了一些,但django-select2-forms看起来对我来说是最好的。