使用django-autocomplete-light为Django Admin中OneToOne字段实现自动补全失败
嘿,我来一步步教你搞定在Django Admin里给Token模型的user字段添加django-autocomplete-light自动补全功能的事儿!
1. 先安装django-autocomplete-light
首先得把包装到你的项目里,打开终端跑这个命令:
pip install django-autocomplete-light
2. 配置Django项目的Settings
这一步很关键,要把dal和dal_select2加到INSTALLED_APPS里,而且必须放在django.contrib.admin前面,因为dal会替换默认的Admin组件:
INSTALLED_APPS = [ 'dal', 'dal_select2', 'django.contrib.admin', # 下面是你项目里已有的其他App,比如django.contrib.auth这些 ]
3. 创建用户搜索的Autocomplete视图
找个合适的App(比如你存放用户相关代码的users App,或者专门处理Token的App),新建或修改views.py,添加以下代码:
from dal import autocomplete from django.contrib.auth import get_user_model # 获取你的自定义User模型(如果用默认的就是User) User = get_user_model() class UserAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self): # 先过滤出活跃用户,你可以根据需求调整这个条件 queryset = User.objects.filter(is_active=True) # 如果用户输入了搜索关键词,就按用户名或邮箱过滤 if self.q: queryset = queryset.filter( username__icontains=self.q ) | queryset.filter( email__icontains=self.q ) return queryset
然后在同一个App的urls.py里给这个视图配置路由:
from django.urls import path from .views import UserAutocomplete urlpatterns = [ # 其他已有的路由... path('user-autocomplete/', UserAutocomplete.as_view(), name='user-autocomplete'), ]
4. 自定义Token的Admin类
在你的Admin配置文件(比如admin.py)里,注册Token模型并替换user字段的组件为dal的自动补全组件:
from django.contrib import admin from django.contrib.auth.models import Token from dal import autocomplete from django.db import models class TokenAdmin(admin.ModelAdmin): # 列表页显示的字段 list_display = ('key', 'user', 'created') # 替换OneToOneField的默认组件为自动补全 formfield_overrides = { models.OneToOneField: { 'widget': autocomplete.ModelSelect2( url='user-autocomplete', # 对应刚才配置的路由名称 attrs={ 'data-placeholder': '输入用户名或邮箱搜索...', 'data-minimum-input-length': 2, # 输入至少2个字符才触发搜索 } ) }, } # 注册Token模型到Admin后台 admin.site.register(Token, TokenAdmin)
小提示
- 如果你的User模型有自定义字段(比如昵称、真实姓名),可以在
UserAutocomplete的get_queryset里加上对应的过滤条件,比如queryset.filter(nickname__icontains=self.q) - 配置完后记得重启Django服务,有时候静态资源需要重新加载才会生效
- 测试的时候可以输入用户名或邮箱的部分字符,看看会不会自动弹出匹配的用户选项
内容的提问来源于stack exchange,提问作者work_in_progress
相关产品推荐
相关产品推荐

