Что стало available_attrs на Django 3?
Во-первых, я новичок в Django, поэтому, пожалуйста, будьте милы со мной:D
В настоящее время я адаптирую файлы.py для Django 3, потому что файлы, которые у меня есть, совместимы с 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: извините за мой плохой английский
1 ответ
available_attrs()
когда-либо существовал только для того, чтобы помочь связать Python 2 с Python 3. Это задокументировано в примечаниях к выпуску Django 3.0:
Удалены частные API совместимости с Python 2.
Хотя поддержка Python 2 была удалена в Django 2.0, некоторые частные API не были удалены из Django, чтобы сторонние приложения могли продолжать использовать их до конца жизненного цикла Python 2.
Поскольку мы ожидаем, что приложения потеряют совместимость с Python 2 при добавлении поддержки Django 3.0, в настоящее время мы удаляем эти API.
- [...]
django.utils.decorators.available_attrs()
- Эта функция возвращаетfunctools.WRAPPER_ASSIGNMENTS
Если @wraps()
в вашей строке пробы является стандартным functools.wraps()
декоратор, то вы можете полностью удалитьassigned=available_attrs(...)
, потому как functools.WRAPPER_ASSIGNMENTS
значение по умолчанию для assigned
:
@wraps(view_func)
в противном случае просто используйте functools.WRAPPER_ASSIGNMENTS
прямо.