Django 3 上的 available_attrs 变成了什么?

What became available_attrs on Django 3?

首先,我是 Django 的新手,所以请多多关照 :D

我目前正在为 Django 3 调整 .py 文件,因为我拥有的文件与 Django 2 兼容。因此,对新版本和文件进行了一些更改,它是这样写的:

@wraps(view_func, assigned=available_attrs(view_func))

随着导入:

from django.utils.decorators import available_attrs

我搜索了 available_attrs 的改编版,我很快发现它已被新版本删除。

当我启动代码时,我有这个:

ImportError : cannot import name 'available_attrs' from 'django.utils.decorators'

所以我想知道我应该写什么来代替 available_attrs 才能让它工作?

PS : 抱歉我的英语不好

available_attrs() 的存在只是为了帮助 Python 2 和 Python 3 之间的桥梁。这记录在 Django 3.0 release notes:

Removed private Python 2 compatibility APIs

While Python 2 support was removed in Django 2.0, some private APIs weren’t removed from Django so that third party apps could continue using them until the Python 2 end-of-life.

Since we expect apps to drop Python 2 compatibility when adding support for Django 3.0, we’re removing these APIs at this time.

  • [...]
  • django.utils.decorators.available_attrs() - This function returns functools.WRAPPER_ASSIGNMENTS

如果你的示例行中的@wraps()是标准的functools.wraps() decorator,那么你可以完全删除assigned=available_attrs(...),因为functools.WRAPPER_ASSIGNMENTSassigned 的默认值:

@wraps(view_func)

否则,直接使用functools.WRAPPER_ASSIGNMENTS即可。