问题描述
我有一个带有 ModelForm
小部件的 FilteredSelectMultiple
from django import forms
from django.contrib import admin
class PortFolioForm(forms.ModelForm):
class Meta:
model = PortFolio
fields = ['title','description','keywords']
class Media:
css = {'all':['admin/css/widgets.css']}
js = ['/admin/jsi18n/']
keywords = forms.ModelMultipleChoiceField(label='Mots clés',widget=admin.widgets.FilteredSelectMultiple('Mots clés',False),queryset=Keyword.objects.all())
我在管理员外部使用表单,在视图内部
c = {'form': PortFolioForm() }
return render(request,'portfolio.html',c)
......
form = PortFolioForm(request.POST)
if form.is_valid():
form.save()
......
{{ form | crispy }}
如果没有则不会出现
我收到以下 js 错误:
拒绝执行来自 'http://localhost/admin/login/?next=/admin/jsi18n/' 的脚本,因为它的 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查.
未捕获的 ReferenceError: interpolate 未定义 在 Object.init (SelectFilter2.js:38) 在 SelectFilter2.js:233 在 NodeList.forEach() 在 SelectFilter2.js:231
由于我正在开发的网站旨在供其他用户使用,因此我只想使用小部件本身,因为所有保存都在视图中完成,使用 form.save()
解决方法
这可能是因为您正在访问管理 URL 下的脚本:
class Media:
css = {'all':['admin/css/widgets.css']}
js = ['/admin/jsi18n/']
您需要访问 /admin/ 位置之外的 js。将脚本复制到不在 admin/ 下的文件夹,然后更改位置,或提供不在 admin 下的 url。例如添加到 urls.py:
url(r'^jsi18n/$','django.views.i18n.javascript_catalog',name='jsi18n')
然后将表单脚本网址更改为:
class Media:
css = {'all':['admin/css/widgets.css']}
js = ['jsi18n/']
检查Django's FilteredSelectMultiple widget only works when logged in