Что стало 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 прямо.

Другие вопросы по тегам