django 如何防止错误:403在ModelAdmin.autocomplete_fields?

2w3kk1z5  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(163)

ModelAdmin.autocomplete_fields看起来很容易实现到Django admin中:

class UserAdmin(admin.ModelAdmin):
    autocomplete_fields = ['material']
admin.site.register(User, UserAdmin)    

class MaterialAdmin(admin.ModelAdmin):
        search_fields = ['name']
admin.site.register(Material, MaterialAdmin)

字符串
它正确地呈现了该字段(作为搜索字段而不是下拉列表),但搜索字段显示“无法加载结果”,并且 inspect 显示:

  • /admin/autocomplete/ 403(Forbidden)jquery.js:9203

我假设存在从Material模型接收数据的csrf问题。我研究了从csrf中排除此请求的方法,但无法找出如何通过ModelAdmin.autocomplete_fields来实现这一点。
我也试过使用django-autocomplete-light,但无法让它正常工作。

ldioqlga

ldioqlga1#

如果你实现了自己的UserAdmin,要么确保按照文档中的要求定义了search_fields,要么使用Django的UserAdmin作为基类。
另外,如果你刚刚升级了Django版本,它停止了工作,请清除缓存以加载正确的JavaScript文件。

ru9i0ody

ru9i0ody2#

这是因为DAL和Django 3.2 +版本之间的冲突。如果你关闭DAL,它可以解决这个问题。DAL的js重载了Django的1,就是这样。要了解更多信息,请点击链接至Dal's github issue

6ie5vjzr

6ie5vjzr3#

我也遇到过同样的问题,这是由于django版本,它在以前的版本中有这个项目,当我把它传递给新版本时,它开始给予我这种类型的错误。我建议你尝试注解包含autocomplete_fields的行,因为django 3.2已经自动这样做了。
欢迎光临

class ArticulosAdmin(admin.ModelAdmin):

form = ArticulosAdminForm
list_display = ['Articulo', 'Autores','tipoDoc','Etiqueta']
search_fields = ['nomArt','nomOrigDoc','etiDoc','anoArt','anoOrigDoc']
filter_horizontal = ['materia','palabraClave','idioma']
fields = ('materia','palabraClave','nomArt','nomOrigDoc','revista','pagArt','anoArt','anoOrigDoc','resumenEsDoc','resumenEnDoc','resumenFrDoc','consigDoc','idioma','stockDoc','printDoc','derechoDoc')
# autocomplete_fields = ['revista']
inlines = [ArticuloAutorInline]
change_form_template = 'admin/repositorio/change_form.html'

字符串
一旦注解了这些行,您将看到您的问题将得到解决。
资料来源:
https://groups.google.com/g/django-users/c/RQ-dFgcBaIQ/m/RX5kFxbOAgAJ?pli=1+https://github.com/sehmaschine/django-grappelli/issues/963的数据库

相关问题