django admin中的ForeignKey字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django admin中的ForeignKey字段相关的知识,希望对你有一定的参考价值。

用户模型中有大约1.5万个条目。因此,当我在没有raw_id_fields的django-admin中使用它时,在将所有条目作为外键的选择菜单加载时导致问题。是否存在替代方式,以便可以轻松加载或可以搜索。

基本上我有如上定义的这些模型,并且在ProfileRecommendation模型中有一个用作ForeignKey的User模型。因此,用户模型的数据库条目包含大约1,50,000个条目。我不希望这些外来字段的默认选择选项。相反,如果可以过滤掉它们并只加载用户表的几个条目。或者无论如何我可以使它们像自动完成建议一样可搜索

admin.py

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)

models.py

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='')
答案

我建议你使用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 autocomplete的包:list of autocomplete packages here

我从列表中尝试了一些,但django-select2-forms看起来对我来说是最好的。

以上是关于django admin中的ForeignKey字段的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin 中的 ForeignKey 或 ManyToMany 字段搜索

添加/更改表单中的ForeignKey字段 - Django admin

Django Admin Cookbook-36如何更改下拉菜单中的ForeignKey显示文本

如何在 Django Admin 中更改 ForeignKey 显示文本?

django admin编辑被外键关联的主表时支持显示字表记录

为啥我得到一个“(admin.E003)'raw_id_fields [N]'的值必须是ForeignKey或ManyToManyField。” Django应用程序中的错误?