You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin自动补全404报错ApartmentPromotionAdmin需配置search_fields

问题根因

两个报错的触发逻辑如下:

  1. 'ManyToOneRel' object has no attribute 'get_limit_choices_to':自定义Form的AutocompleteSelect部件传参错误,你传入了外键字段的remote_field(类型为ManyToOneRel),但该部件要求第一个参数为外键字段实例本身。
  2. ApartmentPromotionAdmin must have search_fields for the autocomplete_view:你同时给ApartmentPromotionAdmin配置了autocomplete_fields、又自定义了同字段的AutocompleteSelect部件,参数错误导致Django识别自动补全源异常,误将ApartmentPromotionAdmin当做自动补全的数据源类,而该类未配置search_fields。

修复方案

二选一即可,推荐用方案1更符合Django原生设计,维护成本更低:

方案1:直接使用原生autocomplete_fields

删掉自定义的PromotionApartmentForm全量代码,调整ApartmentPromotionAdmin配置如下:

class ApartmentPromotionAdmin(admin.ModelAdmin):
    list_display = ("id", "apartment")
    autocomplete_fields = ["apartment"]
    # 若要调整下拉框宽度,通过Media引入自定义css即可
    class Media:
        css = {
            "all": ("css/custom_admin.css",)
        }

在你项目的静态文件目录下新增css/custom_admin.css,添加样式:

.admin-autocomplete {
    width: 400px !important;
}

注意:请确保Apartment模型已经用ApartmentAdmin注册到Admin站点,你当前的ApartmentAdmin已经配置了符合要求的search_fields,无需调整

方案2:保留自定义Form部件

删除ApartmentPromotionAdmin中的autocomplete_fields配置,同时修正Form中AutocompleteSelect的传参:

class PromotionApartmentForm(forms.ModelForm):
    class Meta:
        fields = "__all__"
        widgets = {
            "apartment":
            AutocompleteSelect(
                # 去掉.remote_field,直接传入字段实例
                ApartmentPromotion._meta.get_field("apartment"),
                admin.site,
                attrs={"style": "width: 400px"},
            ),
        }

class ApartmentPromotionAdmin(admin.ModelAdmin):
    form = PromotionApartmentForm
    list_display = ("id", "apartment")

内容的提问来源于stack exchange,提问作者Ryabchenko Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:48:00