Django Autocomplete Light的Select2组件无法正常显示问题求助
问题修复方案
核心问题1:CreateView未绑定自定义表单
你在views.py中定义的CreateEntry类没有指定使用你写的JournalForm,Django会自动生成默认的ModelForm,自然不会加载DAL的Select2组件。
修复:在CreateEntry类中添加form_class配置:
from .forms import JournalForm class CreateEntry(LoginRequiredMixin, generic.CreateView): form_class = JournalForm model = JournalEntry def form_valid(self, form): self.object = form.save(commit=False) self.object.user = self.request.user self.object.save() return super().form_valid(form) def get_success_url(self): return reverse_lazy('home')
问题2:urls.py中自动补全视图配置错误
你在路由中给RiverAutocomplete传递了多余的错误参数,create_field='name'和你的模型字段不匹配,且你已经在视图类中自定义了get_queryset,不需要额外传model参数。
修复:修改urls.py中的对应路由:
url(r'^river-autocomplete/$', views.RiverAutocomplete.as_view(), name='river-autocomplete'),
问题3:jQuery重复加载导致JS冲突
base.html的头部已经加载了jQuery 3.3.1,你在页面的footer块中又加载了admin自带的jQuery,两次加载会覆盖之前的实例,导致Select2组件初始化失败。
修复:删掉页面模板footer块中下面这行代码:
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>
问题4:表单字段配置冲突
你在JournalForm的Meta中设置了fields = "__all__",会自动包含user字段,而你在视图中是表单提交后才给user赋值,会导致表单校验失败。
修复:修改forms.py中JournalForm的Meta配置:
class Meta: model = models.JournalEntry fields = ('date', 'river', 'flow', 'description', 'public')
修复完以上问题后重新启动服务即可正常加载Select2自动补全组件。
附加问题回答
没有固定的排查时长标准,满足以下条件就可以发帖提问:
- 已经通读官方文档对应章节的故障排查、常见问题部分
- 已经搜索过所有能找到的相关历史问题,尝试了所有适配你的场景的解决方案均无效
- 已经完成基础排查:浏览器控制台查看是否有JS报错、网络请求面板检查是否有静态资源加载失败、服务端日志排查是否有报错
- 已经整理好可以复现问题的最小代码片段,以及你已经做过的排查步骤说明
通常如果连续排查1-2小时没有任何进展,就可以准备提问了,提问时写清楚你已经尝试过的方案,可以避免收到无效回复,也能更快得到准确的回答。
内容的提问来源于stack exchange,提问作者twomed
相关产品推荐
相关产品推荐

