在 django admin 里用 autocomplete_fields 给 ForeignKey, OneToOneField 字段 提速

django admin 的 编辑、新增 页面, ForeignKey, OneToOneField 这些个字段, 默认会用下拉框的方式加载数据, 如果 关联的字段 数据量非常大

就会导致 编辑、新增页面非常卡顿, 这是因为 他们会加载所有 下拉框内容

解决办法

在 admin里, 用 autocomplete_fields 来声明这个字段, 如下:

# 假设name字段 通过  ForeignKey, OneToOneField  关联到了另外一张非常大的表

# xxx/models.py
class XXXDetail(models.Model):
    
    name = models.OneToOneField(
        Myname, on_delete=models.CASCADE, primary_key=True, related_name="details"
    )

    # name =  models.ForeignKey(Myname, on_delete=models.CASCADE, related_name="signatures")
  
    fetched_at = models.DateTimeField(auto_now_add=True)

 



# xxx/admin.py
@admin.register(XXXDetail)
class XXXDetailAdmin(admin.ModelAdmin):
    autocomplete_fields = ("name",)

    list_display = ("id", "name", "fetched_at" )
 

这样 字段name 就是不是 下拉框了, 而是一个 需要输入关键词 来触发的 自动完成输入框, 新增的时候,他默认不会加载数据,输入关键词后,只会加载有限的 相关的数据,编辑的时候,他也只会加载相关的数据