微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django 无需登录即可使用管理小部件

如何解决django 无需登录即可使用管理小部件

我有一个带有 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 }}

当我已经以管理员身份登录时,小部件正常显示

enter image description here

如果没有则不会出现

enter image description here

我收到以下 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。