{
  "description": "Example project for the article https://pushingpixels.at/articles/django-upgrade-skip-lts: an invented but typical Django 3.2 project, planned for Django 5.2 with django-upgrade-report 1.1.0 on 2026-10-10. 'direct' is the report for one jump, 'path' the plan through Django 4.2 (--via lts), 'path_python_3_12' the same plan with --python-target 3.12.",
  "requirements": [
    "Django==3.2.18",
    "djangorestframework==3.14.0",
    "django-filter==22.1",
    "django-cors-headers==3.13.0",
    "django-debug-toolbar==3.8.1",
    "django-crispy-forms==1.14.0",
    "django-allauth==0.52.0",
    "django-storages==1.13.2",
    "django-celery-beat==2.4.0",
    "celery==5.2.7",
    "django-environ==0.9.0",
    "django-extensions==3.2.1",
    "django-model-utils==4.3.1",
    "django-import-export==3.0.2",
    "django-taggit==3.1.0",
    "django-reversion==5.0.4",
    "psycopg2-binary==2.9.5",
    "Pillow==9.4.0",
    "requests==2.28.2",
    "gunicorn==20.1.0"
  ],
  "python": "3.9",
  "direct": {
    "schema_version": 1,
    "kind": "report",
    "tool": {
      "name": "django-upgrade-report",
      "version": "1.1.0",
      "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
    },
    "generated": "2026-10-10T07:15:05.318868+00:00",
    "framework": "django",
    "target": "5.2",
    "target_released": true,
    "current_framework": "3.2.18",
    "framework_requires_python": ">=3.10",
    "current_django": "3.2.18",
    "django_requires_python": ">=3.10",
    "project_python": "3.9",
    "source": "requirements.txt",
    "warnings": [
      "Django 5.2 needs Python >=3.10, your project uses 3.9 (from .python-version)"
    ],
    "notices": [],
    "counts": {
      "ready": 0,
      "upgrade": 11,
      "check": 3,
      "blocked": 0
    },
    "packages": [
      {
        "name": "django-celery-beat",
        "current": "2.4.0",
        "spec": null,
        "latest": "2.9.0",
        "status": "upgrade",
        "upgrade_to": "2.8.0",
        "phase": "before",
        "reason": "2.8.0 declares Django 5.2",
        "notes": [],
        "last_release": "2026-02-28T16:45:32.822974+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 0,
        "changelog_url": "https://github.com/celery/django-celery-beat/releases",
        "repository_url": "https://github.com/celery/django-celery-beat",
        "direct": true,
        "origin": "requirements.txt:9",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-environ",
        "current": "0.9.0",
        "spec": null,
        "latest": "0.14.0",
        "status": "upgrade",
        "upgrade_to": "0.13.0",
        "phase": "before",
        "reason": "0.13.0 declares Django 5.2",
        "notes": ["crosses 4 major versions"],
        "last_release": "2026-06-18T22:49:54.355797+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 4,
        "changelog_url": "https://django-environ.readthedocs.org/en/latest/changelog.html",
        "repository_url": "https://github.com/joke2k/django-environ",
        "direct": true,
        "origin": "requirements.txt:11",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-allauth",
        "current": "0.52.0",
        "spec": null,
        "latest": "65.19.7",
        "status": "upgrade",
        "upgrade_to": "65.7.0",
        "phase": "with",
        "reason": "65.7.0 declares Django 5.2",
        "notes": ["crosses 13 major versions"],
        "last_release": "2026-10-01T12:35:20.844382+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 13,
        "changelog_url": "https://codeberg.org/allauth/django-allauth/src/branch/main/ChangeLog.rst",
        "repository_url": null,
        "direct": true,
        "origin": "requirements.txt:7",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-cors-headers",
        "current": "3.13.0",
        "spec": null,
        "latest": "4.9.0",
        "status": "upgrade",
        "upgrade_to": "4.7.0",
        "phase": "with",
        "reason": "4.7.0 declares Django 5.2",
        "notes": ["crosses a major version"],
        "last_release": "2025-09-18T10:40:50.843353+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 1,
        "changelog_url": "https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst",
        "repository_url": "https://github.com/adamchainz/django-cors-headers",
        "direct": true,
        "origin": "requirements.txt:4",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-crispy-forms",
        "current": "1.14.0",
        "spec": null,
        "latest": "2.7",
        "status": "upgrade",
        "upgrade_to": "2.4",
        "phase": "with",
        "reason": "2.4 declares Django 5.2",
        "notes": ["crosses a major version"],
        "last_release": "2026-07-29T11:12:11.052238+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 1,
        "changelog_url": "https://github.com/django-crispy-forms/django-crispy-forms/releases",
        "repository_url": "https://github.com/django-crispy-forms/django-crispy-forms",
        "direct": true,
        "origin": "requirements.txt:6",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-debug-toolbar",
        "current": "3.8.1",
        "spec": null,
        "latest": "8.0.0",
        "status": "upgrade",
        "upgrade_to": "5.1.0",
        "phase": "with",
        "reason": "5.1.0 declares Django 5.2",
        "notes": ["crosses 2 major versions"],
        "last_release": "2026-09-01T18:27:55.018746+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 2,
        "changelog_url": "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html",
        "repository_url": "https://github.com/django-commons/django-debug-toolbar",
        "direct": true,
        "origin": "requirements.txt:5",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-extensions",
        "current": "3.2.1",
        "spec": null,
        "latest": "4.1",
        "status": "upgrade",
        "upgrade_to": "4.0",
        "phase": "with",
        "reason": "4.0 declares Django 5.2",
        "notes": ["crosses a major version"],
        "last_release": "2025-04-11T01:15:37.701755+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 1,
        "changelog_url": "https://github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md",
        "repository_url": "https://github.com/django-extensions/django-extensions",
        "direct": true,
        "origin": "requirements.txt:12",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-filter",
        "current": "22.1",
        "spec": null,
        "latest": "26.2",
        "status": "upgrade",
        "upgrade_to": "25.1",
        "phase": "with",
        "reason": "25.1 declares Django 5.2",
        "notes": ["crosses 3 major versions"],
        "last_release": "2026-10-03T12:00:59.162313+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 3,
        "changelog_url": "https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst",
        "repository_url": "https://github.com/carltongibson/django-filter",
        "direct": true,
        "origin": "requirements.txt:3",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-import-export",
        "current": "3.0.2",
        "spec": null,
        "latest": "4.4.1",
        "status": "upgrade",
        "upgrade_to": "4.3.6",
        "phase": "with",
        "reason": "4.3.6 declares Django 5.2",
        "notes": ["crosses a major version"],
        "last_release": "2026-05-05T12:42:42.554661+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 1,
        "changelog_url": "https://github.com/django-import-export/django-import-export/blob/main/docs/changelog.rst",
        "repository_url": "https://github.com/django-import-export/django-import-export",
        "direct": true,
        "origin": "requirements.txt:14",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-reversion",
        "current": "5.0.4",
        "spec": null,
        "latest": "6.3.0",
        "status": "upgrade",
        "upgrade_to": "6.2.0",
        "phase": "with",
        "reason": "6.2.0 declares Django 5.2",
        "notes": ["crosses a major version"],
        "last_release": "2026-06-12T19:55:45.381980+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 1,
        "changelog_url": "https://github.com/etianen/django-reversion/releases",
        "repository_url": "https://github.com/etianen/django-reversion",
        "direct": true,
        "origin": "requirements.txt:16",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "djangorestframework",
        "current": "3.14.0",
        "spec": null,
        "latest": "3.18.3",
        "status": "upgrade",
        "upgrade_to": "3.16.0",
        "phase": "with",
        "reason": "3.16.0 declares Django 5.2",
        "notes": [],
        "last_release": "2026-10-06T21:33:49.917036+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": 0,
        "changelog_url": "https://www.django-rest-framework.org/community/release-notes/",
        "repository_url": "https://github.com/encode/django-rest-framework",
        "direct": true,
        "origin": "requirements.txt:2",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-model-utils",
        "current": "4.3.1",
        "spec": null,
        "latest": "5.0.0",
        "status": "check",
        "upgrade_to": null,
        "phase": null,
        "reason": "declares Django up to 4.1, not 5.2",
        "notes": [
          "no release in 2 years",
          "latest 5.0.0 declares Django up to 5.1, not 5.2"
        ],
        "last_release": "2024-09-04T11:35:22.858744+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": null,
        "changelog_url": "https://github.com/jazzband/django-model-utils/releases",
        "repository_url": "https://github.com/jazzband/django-model-utils",
        "direct": true,
        "origin": "requirements.txt:13",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-storages",
        "current": "1.13.2",
        "spec": null,
        "latest": "1.14.6",
        "status": "check",
        "upgrade_to": null,
        "phase": null,
        "reason": "declares Django up to 4.1, not 5.2",
        "notes": ["latest 1.14.6 declares Django up to 5.1, not 5.2"],
        "last_release": "2025-04-02T02:34:53.291575+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": null,
        "changelog_url": "https://github.com/jschneier/django-storages/releases",
        "repository_url": "https://github.com/jschneier/django-storages",
        "direct": true,
        "origin": "requirements.txt:8",
        "evidence": [],
        "upstream": []
      },
      {
        "name": "django-taggit",
        "current": "3.1.0",
        "spec": null,
        "latest": "6.1.0",
        "status": "check",
        "upgrade_to": null,
        "phase": null,
        "reason": "declares Django up to 4.1, not 5.2",
        "notes": [
          "no release in 2 years",
          "latest 6.1.0 declares Django up to 5.0, not 5.2"
        ],
        "last_release": "2024-09-29T08:07:14.612190+00:00",
        "source": null,
        "built_into_django": null,
        "prerelease": null,
        "majors_crossed": null,
        "changelog_url": "https://github.com/jazzband/django-taggit/releases",
        "repository_url": "https://github.com/jazzband/django-taggit",
        "direct": true,
        "origin": "requirements.txt:15",
        "evidence": [],
        "upstream": []
      }
    ],
    "not_on_index": [],
    "not_checked": [],
    "external": [],
    "skipped_non_django": 5,
    "unused": [],
    "removals": [
      {
        "version": "4.0",
        "text": "django.utils.http.urlquote(), urlquote_plus(), urlunquote(), and urlunquote_plus() are removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.utils.encoding.force_text() and smart_text() are removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.utils.translation.ugettext(), ugettext_lazy(), ugettext_noop(), ungettext(), and ungettext_lazy() are removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.views.i18n.set_language() doesn't set the user language in request.session (key _language)",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "alias=None is required in the signature of django.db.models.Expression.get_group_by_cols() subclasses",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.utils.text.unescape_entities() is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.utils.http.is_safe_url() is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The PASSWORD_RESET_TIMEOUT_DAYS setting is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The isnull lookup no longer allows using non-boolean values as the right-hand side",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The django.db.models.query_utils.InvalidQuery exception class is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The django-admin.py entry point is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The HttpRequest.is_ajax() method is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for the pre-Django 3.1 encoding format of cookies values used by django.contrib.messages.storage.cookie.CookieStorage is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for the pre-Django 3.1 password reset tokens in the admin site (that use the SHA-1 hashing algorithm) is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for the pre-Django 3.1 encoding format of sessions is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for the pre-Django 3.1 django.core.signing.Signer signatures (encoded with the SHA-1 algorithm) is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for the pre-Django 3.1 django.core.signing.dumps() signatures (encoded with the SHA-1 algorithm) in django.core.signing.loads() is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for the pre-Django 3.1 user sessions (that use the SHA-1 algorithm) is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The get_response argument for django.utils.deprecation.MiddlewareMixin.__init__() is required and doesn't accept None",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The providing_args argument for django.dispatch.Signal is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The length argument for django.utils.crypto.get_random_string() is required",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The list message for ModelMultipleChoiceField is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "Support for passing raw column aliases to QuerySet.order_by() is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The NullBooleanField model field is removed, except for support in historical migrations",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.conf.urls.url() is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The django.contrib.postgres.fields.JSONField model field is removed, except for support in historical migrations",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.contrib.postgres.fields.jsonb.KeyTransform and django.contrib.postgres.fields.jsonb.KeyTextTransform are removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "django.contrib.postgres.forms.JSONField is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The {% ifequal %} and {% ifnotequal %} template tags are removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.0",
        "text": "The DEFAULT_HASHING_ALGORITHM transitional setting is removed",
        "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "Support for assigning objects which don't support creating deep copies with copy.deepcopy() to class attributes in TestCase.setUpTestData() is removed",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "Support for using a boolean value in BaseCommand.requires_system_checks is removed",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "The whitelist argument and domain_whitelist attribute of django.core.validators.EmailValidator are removed",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "The default_app_config application configuration variable is removed",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "TransactionTestCase.assertQuerysetEqual() no longer calls repr() on a queryset when compared to string values",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "The django.core.cache.backends.memcached.MemcachedCache backend is removed",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "4.1",
        "text": "Support for the pre-Django 3.2 format of messages used by django.contrib.messages.storage.cookie.CookieStorage is removed",
        "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The SERIALIZE test setting is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The undocumented django.utils.baseconv module is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The undocumented django.utils.datetime_safe module is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The default value of the USE_TZ setting is changed from False to True",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The default sitemap protocol for sitemaps built outside the context of a request is changed from 'http' to 'https'",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The extra_tests argument for DiscoverRunner.build_suite() and DiscoverRunner.run_tests() is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The django.contrib.postgres.aggregates.ArrayAgg, JSONBAgg, and StringAgg aggregates no longer return [], [], and '', respectively, when there are no rows",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The USE_L10N setting is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The USE_DEPRECATED_PYTZ transitional setting is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "Support for pytz timezones is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The is_dst argument is removed from:",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin classes are removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The undocumented BaseForm._html_output() method is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The ability to return a str, rather than a SafeString, when rendering an ErrorDict and ErrorList is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The SitemapIndexItem.__str__() method is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The CSRF_COOKIE_MASKED transitional setting is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The name argument of django.utils.functional.cached_property() is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The opclasses argument of django.contrib.postgres.constraints.ExclusionConstraint is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The undocumented ability to pass errors=None to SimpleTestCase.assertFormError() and assertFormsetError() is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "django.contrib.sessions.serializers.PickleSerializer is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The usage of QuerySet.iterator() on a queryset that prefetches related objects without providing the chunk_size argument is no longer allowed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "Passing unsaved model instances to related filters is no longer allowed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "created=True is required in the signature of RemoteUserBackend.configure_user() subclasses",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "Support for logging out via GET requests in the django.contrib.auth.views.LogoutView and django.contrib.auth.views.logout_then_login() is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The django.utils.timezone.utc alias to datetime.timezone.utc is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "Passing a response object and a form/formset name to SimpleTestCase.assertFormError() and assertFormSetError() is no longer allowed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The django.contrib.gis.admin.OpenLayersWidget is removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The \"django/forms/default.html\" and \"django/forms/formsets/default.html\" templates are removed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "The default form and formset rendering style is changed to the div-based",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.0",
        "text": "Passing nulls_first=False or nulls_last=False to Expression.asc() and Expression.desc() methods, and the OrderBy expression is no longer allowed",
        "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The BaseUserManager.make_random_password() method is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The model's Meta.index_together option is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The length_is template filter is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The django.contrib.auth.hashers.SHA1PasswordHasher, django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher, and django.contrib.auth.hashers.UnsaltedMD5PasswordHasher are removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The model django.contrib.postgres.fields.CICharField, django.contrib.postgres.fields.CIEmailField, and django.contrib.postgres.fields.CITextField are removed, except for support in historical migrations",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The django.contrib.postgres.fields.CIText mixin is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The map_width and map_height attributes of BaseGeometryWidget are removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The SimpleTestCase.assertFormsetError() method is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": true,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The TransactionTestCase.assertQuerysetEqual() method is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "Support for passing encoded JSON string literals to JSONField and associated lookups and expressions is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "Support for passing positional arguments to Signer and TimestampSigner is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The DEFAULT_FILE_STORAGE and STATICFILES_STORAGE settings is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      },
      {
        "version": "5.1",
        "text": "The django.core.files.storage.get_storage_class() function is removed",
        "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
        "fixer": false,
        "used_in": null
      }
    ],
    "changes": null,
    "python": {
      "target": "3.10",
      "current": "3.9",
      "packages": [],
      "ready": 18,
      "pure": 1,
      "silent": [],
      "not_checked": [],
      "django_note": null
    },
    "explain": {},
    "commands": null
  },
  "path": {
    "schema_version": 1,
    "kind": "path",
    "tool": {
      "name": "django-upgrade-report",
      "version": "1.1.0",
      "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
    },
    "generated": "2026-10-10T07:13:02.885961+00:00",
    "target": "5.2",
    "via": "lts",
    "blocked_at": null,
    "steps": [
      {
        "schema_version": 1,
        "kind": "report",
        "tool": {
          "name": "django-upgrade-report",
          "version": "1.1.0",
          "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
        },
        "generated": "2026-10-10T07:13:03.479387+00:00",
        "framework": "django",
        "target": "4.2",
        "target_released": true,
        "current_framework": "3.2.18",
        "framework_requires_python": ">=3.8",
        "current_django": "3.2.18",
        "django_requires_python": ">=3.8",
        "project_python": "3.9",
        "source": "requirements.txt",
        "warnings": [],
        "notices": [],
        "counts": {
          "ready": 0,
          "upgrade": 14,
          "check": 0,
          "blocked": 0
        },
        "packages": [
          {
            "name": "django-allauth",
            "current": "0.52.0",
            "spec": null,
            "latest": "65.19.7",
            "status": "upgrade",
            "upgrade_to": "0.55.0",
            "phase": "before",
            "reason": "0.55.0 declares Django 4.2",
            "notes": ["crosses 3 major versions"],
            "last_release": "2026-10-01T12:35:20.844382+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 3,
            "changelog_url": "https://codeberg.org/allauth/django-allauth/src/branch/main/ChangeLog.rst",
            "repository_url": null,
            "direct": true,
            "origin": "requirements.txt:7",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-celery-beat",
            "current": "2.4.0",
            "spec": null,
            "latest": "2.9.0",
            "status": "upgrade",
            "upgrade_to": "2.5.0",
            "phase": "before",
            "reason": "2.5.0 declares Django 4.2",
            "notes": [],
            "last_release": "2026-02-28T16:45:32.822974+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/celery/django-celery-beat/releases",
            "repository_url": "https://github.com/celery/django-celery-beat",
            "direct": true,
            "origin": "requirements.txt:9",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-cors-headers",
            "current": "3.13.0",
            "spec": null,
            "latest": "4.9.0",
            "status": "upgrade",
            "upgrade_to": "3.14.0",
            "phase": "before",
            "reason": "3.14.0 declares Django 4.2",
            "notes": [],
            "last_release": "2025-09-18T10:40:50.843353+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst",
            "repository_url": "https://github.com/adamchainz/django-cors-headers",
            "direct": true,
            "origin": "requirements.txt:4",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-debug-toolbar",
            "current": "3.8.1",
            "spec": null,
            "latest": "8.0.0",
            "status": "upgrade",
            "upgrade_to": "4.0.0",
            "phase": "before",
            "reason": "4.0.0 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-09-01T18:27:55.018746+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html",
            "repository_url": "https://github.com/django-commons/django-debug-toolbar",
            "direct": true,
            "origin": "requirements.txt:5",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-environ",
            "current": "0.9.0",
            "spec": null,
            "latest": "0.14.0",
            "status": "upgrade",
            "upgrade_to": "0.11.2",
            "phase": "before",
            "reason": "0.11.2 declares Django 4.2",
            "notes": ["crosses 2 major versions"],
            "last_release": "2026-06-18T22:49:54.355797+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://django-environ.readthedocs.org/en/latest/changelog.html",
            "repository_url": "https://github.com/joke2k/django-environ",
            "direct": true,
            "origin": "requirements.txt:11",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-extensions",
            "current": "3.2.1",
            "spec": null,
            "latest": "4.1",
            "status": "upgrade",
            "upgrade_to": "3.2.3",
            "phase": "before",
            "reason": "3.2.3 declares Django 4.2",
            "notes": [],
            "last_release": "2025-04-11T01:15:37.701755+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md",
            "repository_url": "https://github.com/django-extensions/django-extensions",
            "direct": true,
            "origin": "requirements.txt:12",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-filter",
            "current": "22.1",
            "spec": null,
            "latest": "26.2",
            "status": "upgrade",
            "upgrade_to": "23.1",
            "phase": "before",
            "reason": "23.1 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-10-03T12:00:59.162313+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst",
            "repository_url": "https://github.com/carltongibson/django-filter",
            "direct": true,
            "origin": "requirements.txt:3",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-import-export",
            "current": "3.0.2",
            "spec": null,
            "latest": "4.4.1",
            "status": "upgrade",
            "upgrade_to": "3.3.0",
            "phase": "before",
            "reason": "3.3.0 declares Django 4.2",
            "notes": [],
            "last_release": "2026-05-05T12:42:42.554661+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/django-import-export/django-import-export/blob/main/docs/changelog.rst",
            "repository_url": "https://github.com/django-import-export/django-import-export",
            "direct": true,
            "origin": "requirements.txt:14",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-model-utils",
            "current": "4.3.1",
            "spec": null,
            "latest": "5.0.0",
            "status": "upgrade",
            "upgrade_to": "4.4.0",
            "phase": "before",
            "reason": "4.4.0 declares Django 4.2",
            "notes": ["no release in 2 years"],
            "last_release": "2024-09-04T11:35:22.858744+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/jazzband/django-model-utils/releases",
            "repository_url": "https://github.com/jazzband/django-model-utils",
            "direct": true,
            "origin": "requirements.txt:13",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-storages",
            "current": "1.13.2",
            "spec": null,
            "latest": "1.14.6",
            "status": "upgrade",
            "upgrade_to": "1.14",
            "phase": "before",
            "reason": "1.14 declares Django 4.2",
            "notes": [],
            "last_release": "2025-04-02T02:34:53.291575+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/jschneier/django-storages/releases",
            "repository_url": "https://github.com/jschneier/django-storages",
            "direct": true,
            "origin": "requirements.txt:8",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "djangorestframework",
            "current": "3.14.0",
            "spec": null,
            "latest": "3.18.3",
            "status": "upgrade",
            "upgrade_to": "3.15.0",
            "phase": "before",
            "reason": "3.15.0 declares Django 4.2",
            "notes": [],
            "last_release": "2026-10-06T21:33:49.917036+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://www.django-rest-framework.org/community/release-notes/",
            "repository_url": "https://github.com/encode/django-rest-framework",
            "direct": true,
            "origin": "requirements.txt:2",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-crispy-forms",
            "current": "1.14.0",
            "spec": null,
            "latest": "2.7",
            "status": "upgrade",
            "upgrade_to": "2.1",
            "phase": "with",
            "reason": "2.1 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-07-29T11:12:11.052238+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/django-crispy-forms/django-crispy-forms/releases",
            "repository_url": "https://github.com/django-crispy-forms/django-crispy-forms",
            "direct": true,
            "origin": "requirements.txt:6",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-reversion",
            "current": "5.0.4",
            "spec": null,
            "latest": "6.3.0",
            "status": "upgrade",
            "upgrade_to": "6.2.0",
            "phase": "with",
            "reason": "6.2.0 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-06-12T19:55:45.381980+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/etianen/django-reversion/releases",
            "repository_url": "https://github.com/etianen/django-reversion",
            "direct": true,
            "origin": "requirements.txt:16",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-taggit",
            "current": "3.1.0",
            "spec": null,
            "latest": "6.1.0",
            "status": "upgrade",
            "upgrade_to": "5.0.1",
            "phase": "with",
            "reason": "5.0.1 declares Django 4.2",
            "notes": ["crosses 2 major versions", "no release in 2 years"],
            "last_release": "2024-09-29T08:07:14.612190+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://github.com/jazzband/django-taggit/releases",
            "repository_url": "https://github.com/jazzband/django-taggit",
            "direct": true,
            "origin": "requirements.txt:15",
            "evidence": [],
            "upstream": []
          }
        ],
        "not_on_index": [],
        "not_checked": [],
        "external": [],
        "skipped_non_django": 5,
        "unused": [],
        "removals": [
          {
            "version": "4.0",
            "text": "django.utils.http.urlquote(), urlquote_plus(), urlunquote(), and urlunquote_plus() are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.encoding.force_text() and smart_text() are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.translation.ugettext(), ugettext_lazy(), ugettext_noop(), ungettext(), and ungettext_lazy() are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.views.i18n.set_language() doesn't set the user language in request.session (key _language)",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "alias=None is required in the signature of django.db.models.Expression.get_group_by_cols() subclasses",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.text.unescape_entities() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.http.is_safe_url() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The PASSWORD_RESET_TIMEOUT_DAYS setting is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The isnull lookup no longer allows using non-boolean values as the right-hand side",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The django.db.models.query_utils.InvalidQuery exception class is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The django-admin.py entry point is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The HttpRequest.is_ajax() method is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 encoding format of cookies values used by django.contrib.messages.storage.cookie.CookieStorage is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 password reset tokens in the admin site (that use the SHA-1 hashing algorithm) is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 encoding format of sessions is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 django.core.signing.Signer signatures (encoded with the SHA-1 algorithm) is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 django.core.signing.dumps() signatures (encoded with the SHA-1 algorithm) in django.core.signing.loads() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 user sessions (that use the SHA-1 algorithm) is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The get_response argument for django.utils.deprecation.MiddlewareMixin.__init__() is required and doesn't accept None",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The providing_args argument for django.dispatch.Signal is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The length argument for django.utils.crypto.get_random_string() is required",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The list message for ModelMultipleChoiceField is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for passing raw column aliases to QuerySet.order_by() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The NullBooleanField model field is removed, except for support in historical migrations",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.conf.urls.url() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The django.contrib.postgres.fields.JSONField model field is removed, except for support in historical migrations",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.contrib.postgres.fields.jsonb.KeyTransform and django.contrib.postgres.fields.jsonb.KeyTextTransform are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.contrib.postgres.forms.JSONField is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The {% ifequal %} and {% ifnotequal %} template tags are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The DEFAULT_HASHING_ALGORITHM transitional setting is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "Support for assigning objects which don't support creating deep copies with copy.deepcopy() to class attributes in TestCase.setUpTestData() is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "Support for using a boolean value in BaseCommand.requires_system_checks is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "The whitelist argument and domain_whitelist attribute of django.core.validators.EmailValidator are removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "The default_app_config application configuration variable is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "TransactionTestCase.assertQuerysetEqual() no longer calls repr() on a queryset when compared to string values",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "The django.core.cache.backends.memcached.MemcachedCache backend is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "Support for the pre-Django 3.2 format of messages used by django.contrib.messages.storage.cookie.CookieStorage is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          }
        ],
        "changes": null,
        "python": null,
        "explain": {}
      },
      {
        "schema_version": 1,
        "kind": "report",
        "tool": {
          "name": "django-upgrade-report",
          "version": "1.1.0",
          "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
        },
        "generated": "2026-10-10T07:13:03.565166+00:00",
        "framework": "django",
        "target": "5.2",
        "target_released": true,
        "current_framework": "4.2.30",
        "framework_requires_python": ">=3.10",
        "current_django": "4.2.30",
        "django_requires_python": ">=3.10",
        "project_python": "3.9",
        "source": "requirements.txt",
        "warnings": [
          "Django 5.2 needs Python >=3.10, your project uses 3.9 (from .python-version)"
        ],
        "notices": [],
        "counts": {
          "ready": 1,
          "upgrade": 10,
          "check": 3,
          "blocked": 0
        },
        "packages": [
          {
            "name": "django-allauth",
            "current": "0.55.0",
            "spec": null,
            "latest": "65.19.7",
            "status": "upgrade",
            "upgrade_to": "65.7.0",
            "phase": "before",
            "reason": "65.7.0 declares Django 5.2",
            "notes": ["crosses 10 major versions"],
            "last_release": "2026-10-01T12:35:20.844382+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 10,
            "changelog_url": "https://codeberg.org/allauth/django-allauth/src/branch/main/ChangeLog.rst",
            "repository_url": null,
            "direct": true,
            "origin": "requirements.txt:7",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-celery-beat",
            "current": "2.5.0",
            "spec": null,
            "latest": "2.9.0",
            "status": "upgrade",
            "upgrade_to": "2.8.0",
            "phase": "before",
            "reason": "2.8.0 declares Django 5.2",
            "notes": [],
            "last_release": "2026-02-28T16:45:32.822974+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/celery/django-celery-beat/releases",
            "repository_url": "https://github.com/celery/django-celery-beat",
            "direct": true,
            "origin": "requirements.txt:9",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-cors-headers",
            "current": "3.14.0",
            "spec": null,
            "latest": "4.9.0",
            "status": "upgrade",
            "upgrade_to": "4.7.0",
            "phase": "before",
            "reason": "4.7.0 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2025-09-18T10:40:50.843353+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst",
            "repository_url": "https://github.com/adamchainz/django-cors-headers",
            "direct": true,
            "origin": "requirements.txt:4",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-crispy-forms",
            "current": "2.1",
            "spec": null,
            "latest": "2.7",
            "status": "upgrade",
            "upgrade_to": "2.4",
            "phase": "before",
            "reason": "2.4 declares Django 5.2",
            "notes": [],
            "last_release": "2026-07-29T11:12:11.052238+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/django-crispy-forms/django-crispy-forms/releases",
            "repository_url": "https://github.com/django-crispy-forms/django-crispy-forms",
            "direct": true,
            "origin": "requirements.txt:6",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-debug-toolbar",
            "current": "4.0.0",
            "spec": null,
            "latest": "8.0.0",
            "status": "upgrade",
            "upgrade_to": "5.1.0",
            "phase": "before",
            "reason": "5.1.0 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-09-01T18:27:55.018746+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html",
            "repository_url": "https://github.com/django-commons/django-debug-toolbar",
            "direct": true,
            "origin": "requirements.txt:5",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-environ",
            "current": "0.11.2",
            "spec": null,
            "latest": "0.14.0",
            "status": "upgrade",
            "upgrade_to": "0.13.0",
            "phase": "before",
            "reason": "0.13.0 declares Django 5.2",
            "notes": ["crosses 2 major versions"],
            "last_release": "2026-06-18T22:49:54.355797+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://django-environ.readthedocs.org/en/latest/changelog.html",
            "repository_url": "https://github.com/joke2k/django-environ",
            "direct": true,
            "origin": "requirements.txt:11",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-extensions",
            "current": "3.2.3",
            "spec": null,
            "latest": "4.1",
            "status": "upgrade",
            "upgrade_to": "4.0",
            "phase": "before",
            "reason": "4.0 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2025-04-11T01:15:37.701755+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md",
            "repository_url": "https://github.com/django-extensions/django-extensions",
            "direct": true,
            "origin": "requirements.txt:12",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-filter",
            "current": "23.1",
            "spec": null,
            "latest": "26.2",
            "status": "upgrade",
            "upgrade_to": "25.1",
            "phase": "before",
            "reason": "25.1 declares Django 5.2",
            "notes": ["crosses 2 major versions"],
            "last_release": "2026-10-03T12:00:59.162313+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst",
            "repository_url": "https://github.com/carltongibson/django-filter",
            "direct": true,
            "origin": "requirements.txt:3",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-import-export",
            "current": "3.3.0",
            "spec": null,
            "latest": "4.4.1",
            "status": "upgrade",
            "upgrade_to": "4.3.6",
            "phase": "before",
            "reason": "4.3.6 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-05-05T12:42:42.554661+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/django-import-export/django-import-export/blob/main/docs/changelog.rst",
            "repository_url": "https://github.com/django-import-export/django-import-export",
            "direct": true,
            "origin": "requirements.txt:14",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "djangorestframework",
            "current": "3.15.0",
            "spec": null,
            "latest": "3.18.3",
            "status": "upgrade",
            "upgrade_to": "3.16.0",
            "phase": "before",
            "reason": "3.16.0 declares Django 5.2",
            "notes": [],
            "last_release": "2026-10-06T21:33:49.917036+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://www.django-rest-framework.org/community/release-notes/",
            "repository_url": "https://github.com/encode/django-rest-framework",
            "direct": true,
            "origin": "requirements.txt:2",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-model-utils",
            "current": "4.4.0",
            "spec": null,
            "latest": "5.0.0",
            "status": "check",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django up to 5.0, not 5.2",
            "notes": [
              "no release in 2 years",
              "latest 5.0.0 declares Django up to 5.1, not 5.2"
            ],
            "last_release": "2024-09-04T11:35:22.858744+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/jazzband/django-model-utils/releases",
            "repository_url": "https://github.com/jazzband/django-model-utils",
            "direct": true,
            "origin": "requirements.txt:13",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-storages",
            "current": "1.14",
            "spec": null,
            "latest": "1.14.6",
            "status": "check",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django up to 4.2, not 5.2",
            "notes": ["latest 1.14.6 declares Django up to 5.1, not 5.2"],
            "last_release": "2025-04-02T02:34:53.291575+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/jschneier/django-storages/releases",
            "repository_url": "https://github.com/jschneier/django-storages",
            "direct": true,
            "origin": "requirements.txt:8",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-taggit",
            "current": "5.0.1",
            "spec": null,
            "latest": "6.1.0",
            "status": "check",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django up to 4.2, not 5.2",
            "notes": [
              "no release in 2 years",
              "latest 6.1.0 declares Django up to 5.0, not 5.2"
            ],
            "last_release": "2024-09-29T08:07:14.612190+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/jazzband/django-taggit/releases",
            "repository_url": "https://github.com/jazzband/django-taggit",
            "direct": true,
            "origin": "requirements.txt:15",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-reversion",
            "current": "6.2.0",
            "spec": null,
            "latest": "6.3.0",
            "status": "ready",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django 5.2",
            "notes": [],
            "last_release": "2026-06-12T19:55:45.381980+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/etianen/django-reversion/releases",
            "repository_url": "https://github.com/etianen/django-reversion",
            "direct": true,
            "origin": "requirements.txt:16",
            "evidence": [],
            "upstream": []
          }
        ],
        "not_on_index": [],
        "not_checked": [],
        "external": [],
        "skipped_non_django": 5,
        "unused": [],
        "removals": [
          {
            "version": "5.0",
            "text": "The SERIALIZE test setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented django.utils.baseconv module is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented django.utils.datetime_safe module is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The default value of the USE_TZ setting is changed from False to True",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The default sitemap protocol for sitemaps built outside the context of a request is changed from 'http' to 'https'",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The extra_tests argument for DiscoverRunner.build_suite() and DiscoverRunner.run_tests() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.contrib.postgres.aggregates.ArrayAgg, JSONBAgg, and StringAgg aggregates no longer return [], [], and '', respectively, when there are no rows",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The USE_L10N setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The USE_DEPRECATED_PYTZ transitional setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Support for pytz timezones is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The is_dst argument is removed from:",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin classes are removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented BaseForm._html_output() method is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The ability to return a str, rather than a SafeString, when rendering an ErrorDict and ErrorList is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The SitemapIndexItem.__str__() method is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The CSRF_COOKIE_MASKED transitional setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The name argument of django.utils.functional.cached_property() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The opclasses argument of django.contrib.postgres.constraints.ExclusionConstraint is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented ability to pass errors=None to SimpleTestCase.assertFormError() and assertFormsetError() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "django.contrib.sessions.serializers.PickleSerializer is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The usage of QuerySet.iterator() on a queryset that prefetches related objects without providing the chunk_size argument is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Passing unsaved model instances to related filters is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "created=True is required in the signature of RemoteUserBackend.configure_user() subclasses",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Support for logging out via GET requests in the django.contrib.auth.views.LogoutView and django.contrib.auth.views.logout_then_login() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.utils.timezone.utc alias to datetime.timezone.utc is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Passing a response object and a form/formset name to SimpleTestCase.assertFormError() and assertFormSetError() is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.contrib.gis.admin.OpenLayersWidget is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The \"django/forms/default.html\" and \"django/forms/formsets/default.html\" templates are removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The default form and formset rendering style is changed to the div-based",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Passing nulls_first=False or nulls_last=False to Expression.asc() and Expression.desc() methods, and the OrderBy expression is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The BaseUserManager.make_random_password() method is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The model's Meta.index_together option is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The length_is template filter is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The django.contrib.auth.hashers.SHA1PasswordHasher, django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher, and django.contrib.auth.hashers.UnsaltedMD5PasswordHasher are removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The model django.contrib.postgres.fields.CICharField, django.contrib.postgres.fields.CIEmailField, and django.contrib.postgres.fields.CITextField are removed, except for support in historical migrations",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The django.contrib.postgres.fields.CIText mixin is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The map_width and map_height attributes of BaseGeometryWidget are removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The SimpleTestCase.assertFormsetError() method is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The TransactionTestCase.assertQuerysetEqual() method is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "Support for passing encoded JSON string literals to JSONField and associated lookups and expressions is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "Support for passing positional arguments to Signer and TimestampSigner is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The DEFAULT_FILE_STORAGE and STATICFILES_STORAGE settings is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The django.core.files.storage.get_storage_class() function is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          }
        ],
        "changes": null,
        "python": {
          "target": "3.10",
          "current": "3.9",
          "packages": [],
          "ready": 18,
          "pure": 1,
          "silent": [],
          "not_checked": [],
          "django_note": null
        },
        "explain": {}
      }
    ]
  },
  "path_python_3_12": {
    "schema_version": 1,
    "kind": "path",
    "tool": {
      "name": "django-upgrade-report",
      "version": "1.1.0",
      "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
    },
    "generated": "2026-10-10T07:15:05.565606+00:00",
    "target": "5.2",
    "via": "lts",
    "blocked_at": null,
    "steps": [
      {
        "schema_version": 1,
        "kind": "report",
        "tool": {
          "name": "django-upgrade-report",
          "version": "1.1.0",
          "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
        },
        "generated": "2026-10-10T07:15:05.625105+00:00",
        "framework": "django",
        "target": "4.2",
        "target_released": true,
        "current_framework": "3.2.18",
        "framework_requires_python": ">=3.8",
        "current_django": "3.2.18",
        "django_requires_python": ">=3.8",
        "project_python": "3.9",
        "source": "requirements.txt",
        "warnings": [],
        "notices": [],
        "counts": {
          "ready": 0,
          "upgrade": 14,
          "check": 0,
          "blocked": 0
        },
        "packages": [
          {
            "name": "django-allauth",
            "current": "0.52.0",
            "spec": null,
            "latest": "65.19.7",
            "status": "upgrade",
            "upgrade_to": "0.55.0",
            "phase": "before",
            "reason": "0.55.0 declares Django 4.2",
            "notes": ["crosses 3 major versions"],
            "last_release": "2026-10-01T12:35:20.844382+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 3,
            "changelog_url": "https://codeberg.org/allauth/django-allauth/src/branch/main/ChangeLog.rst",
            "repository_url": null,
            "direct": true,
            "origin": "requirements.txt:7",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-celery-beat",
            "current": "2.4.0",
            "spec": null,
            "latest": "2.9.0",
            "status": "upgrade",
            "upgrade_to": "2.5.0",
            "phase": "before",
            "reason": "2.5.0 declares Django 4.2",
            "notes": [],
            "last_release": "2026-02-28T16:45:32.822974+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/celery/django-celery-beat/releases",
            "repository_url": "https://github.com/celery/django-celery-beat",
            "direct": true,
            "origin": "requirements.txt:9",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-cors-headers",
            "current": "3.13.0",
            "spec": null,
            "latest": "4.9.0",
            "status": "upgrade",
            "upgrade_to": "3.14.0",
            "phase": "before",
            "reason": "3.14.0 declares Django 4.2",
            "notes": [],
            "last_release": "2025-09-18T10:40:50.843353+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst",
            "repository_url": "https://github.com/adamchainz/django-cors-headers",
            "direct": true,
            "origin": "requirements.txt:4",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-debug-toolbar",
            "current": "3.8.1",
            "spec": null,
            "latest": "8.0.0",
            "status": "upgrade",
            "upgrade_to": "4.0.0",
            "phase": "before",
            "reason": "4.0.0 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-09-01T18:27:55.018746+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html",
            "repository_url": "https://github.com/django-commons/django-debug-toolbar",
            "direct": true,
            "origin": "requirements.txt:5",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-environ",
            "current": "0.9.0",
            "spec": null,
            "latest": "0.14.0",
            "status": "upgrade",
            "upgrade_to": "0.11.2",
            "phase": "before",
            "reason": "0.11.2 declares Django 4.2",
            "notes": ["crosses 2 major versions"],
            "last_release": "2026-06-18T22:49:54.355797+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://django-environ.readthedocs.org/en/latest/changelog.html",
            "repository_url": "https://github.com/joke2k/django-environ",
            "direct": true,
            "origin": "requirements.txt:11",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-extensions",
            "current": "3.2.1",
            "spec": null,
            "latest": "4.1",
            "status": "upgrade",
            "upgrade_to": "3.2.3",
            "phase": "before",
            "reason": "3.2.3 declares Django 4.2",
            "notes": [],
            "last_release": "2025-04-11T01:15:37.701755+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md",
            "repository_url": "https://github.com/django-extensions/django-extensions",
            "direct": true,
            "origin": "requirements.txt:12",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-filter",
            "current": "22.1",
            "spec": null,
            "latest": "26.2",
            "status": "upgrade",
            "upgrade_to": "23.1",
            "phase": "before",
            "reason": "23.1 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-10-03T12:00:59.162313+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst",
            "repository_url": "https://github.com/carltongibson/django-filter",
            "direct": true,
            "origin": "requirements.txt:3",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-import-export",
            "current": "3.0.2",
            "spec": null,
            "latest": "4.4.1",
            "status": "upgrade",
            "upgrade_to": "3.3.0",
            "phase": "before",
            "reason": "3.3.0 declares Django 4.2",
            "notes": [],
            "last_release": "2026-05-05T12:42:42.554661+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/django-import-export/django-import-export/blob/main/docs/changelog.rst",
            "repository_url": "https://github.com/django-import-export/django-import-export",
            "direct": true,
            "origin": "requirements.txt:14",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-model-utils",
            "current": "4.3.1",
            "spec": null,
            "latest": "5.0.0",
            "status": "upgrade",
            "upgrade_to": "4.4.0",
            "phase": "before",
            "reason": "4.4.0 declares Django 4.2",
            "notes": ["no release in 2 years"],
            "last_release": "2024-09-04T11:35:22.858744+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/jazzband/django-model-utils/releases",
            "repository_url": "https://github.com/jazzband/django-model-utils",
            "direct": true,
            "origin": "requirements.txt:13",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-storages",
            "current": "1.13.2",
            "spec": null,
            "latest": "1.14.6",
            "status": "upgrade",
            "upgrade_to": "1.14",
            "phase": "before",
            "reason": "1.14 declares Django 4.2",
            "notes": [],
            "last_release": "2025-04-02T02:34:53.291575+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/jschneier/django-storages/releases",
            "repository_url": "https://github.com/jschneier/django-storages",
            "direct": true,
            "origin": "requirements.txt:8",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "djangorestframework",
            "current": "3.14.0",
            "spec": null,
            "latest": "3.18.3",
            "status": "upgrade",
            "upgrade_to": "3.15.0",
            "phase": "before",
            "reason": "3.15.0 declares Django 4.2",
            "notes": [],
            "last_release": "2026-10-06T21:33:49.917036+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://www.django-rest-framework.org/community/release-notes/",
            "repository_url": "https://github.com/encode/django-rest-framework",
            "direct": true,
            "origin": "requirements.txt:2",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-crispy-forms",
            "current": "1.14.0",
            "spec": null,
            "latest": "2.7",
            "status": "upgrade",
            "upgrade_to": "2.1",
            "phase": "with",
            "reason": "2.1 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-07-29T11:12:11.052238+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/django-crispy-forms/django-crispy-forms/releases",
            "repository_url": "https://github.com/django-crispy-forms/django-crispy-forms",
            "direct": true,
            "origin": "requirements.txt:6",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-reversion",
            "current": "5.0.4",
            "spec": null,
            "latest": "6.3.0",
            "status": "upgrade",
            "upgrade_to": "6.2.0",
            "phase": "with",
            "reason": "6.2.0 declares Django 4.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-06-12T19:55:45.381980+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/etianen/django-reversion/releases",
            "repository_url": "https://github.com/etianen/django-reversion",
            "direct": true,
            "origin": "requirements.txt:16",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-taggit",
            "current": "3.1.0",
            "spec": null,
            "latest": "6.1.0",
            "status": "upgrade",
            "upgrade_to": "5.0.1",
            "phase": "with",
            "reason": "5.0.1 declares Django 4.2",
            "notes": ["crosses 2 major versions", "no release in 2 years"],
            "last_release": "2024-09-29T08:07:14.612190+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://github.com/jazzband/django-taggit/releases",
            "repository_url": "https://github.com/jazzband/django-taggit",
            "direct": true,
            "origin": "requirements.txt:15",
            "evidence": [],
            "upstream": []
          }
        ],
        "not_on_index": [],
        "not_checked": [],
        "external": [],
        "skipped_non_django": 5,
        "unused": [],
        "removals": [
          {
            "version": "4.0",
            "text": "django.utils.http.urlquote(), urlquote_plus(), urlunquote(), and urlunquote_plus() are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.encoding.force_text() and smart_text() are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.translation.ugettext(), ugettext_lazy(), ugettext_noop(), ungettext(), and ungettext_lazy() are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.views.i18n.set_language() doesn't set the user language in request.session (key _language)",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "alias=None is required in the signature of django.db.models.Expression.get_group_by_cols() subclasses",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.text.unescape_entities() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.utils.http.is_safe_url() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The PASSWORD_RESET_TIMEOUT_DAYS setting is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The isnull lookup no longer allows using non-boolean values as the right-hand side",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The django.db.models.query_utils.InvalidQuery exception class is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The django-admin.py entry point is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The HttpRequest.is_ajax() method is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 encoding format of cookies values used by django.contrib.messages.storage.cookie.CookieStorage is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 password reset tokens in the admin site (that use the SHA-1 hashing algorithm) is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 encoding format of sessions is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 django.core.signing.Signer signatures (encoded with the SHA-1 algorithm) is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 django.core.signing.dumps() signatures (encoded with the SHA-1 algorithm) in django.core.signing.loads() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for the pre-Django 3.1 user sessions (that use the SHA-1 algorithm) is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The get_response argument for django.utils.deprecation.MiddlewareMixin.__init__() is required and doesn't accept None",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The providing_args argument for django.dispatch.Signal is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The length argument for django.utils.crypto.get_random_string() is required",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The list message for ModelMultipleChoiceField is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "Support for passing raw column aliases to QuerySet.order_by() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The NullBooleanField model field is removed, except for support in historical migrations",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.conf.urls.url() is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The django.contrib.postgres.fields.JSONField model field is removed, except for support in historical migrations",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.contrib.postgres.fields.jsonb.KeyTransform and django.contrib.postgres.fields.jsonb.KeyTextTransform are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "django.contrib.postgres.forms.JSONField is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The {% ifequal %} and {% ifnotequal %} template tags are removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.0",
            "text": "The DEFAULT_HASHING_ALGORITHM transitional setting is removed",
            "url": "https://docs.djangoproject.com/en/4.0/releases/4.0/#features-removed-in-4-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "Support for assigning objects which don't support creating deep copies with copy.deepcopy() to class attributes in TestCase.setUpTestData() is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "Support for using a boolean value in BaseCommand.requires_system_checks is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "The whitelist argument and domain_whitelist attribute of django.core.validators.EmailValidator are removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "The default_app_config application configuration variable is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "TransactionTestCase.assertQuerysetEqual() no longer calls repr() on a queryset when compared to string values",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "The django.core.cache.backends.memcached.MemcachedCache backend is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "4.1",
            "text": "Support for the pre-Django 3.2 format of messages used by django.contrib.messages.storage.cookie.CookieStorage is removed",
            "url": "https://docs.djangoproject.com/en/4.1/releases/4.1/#features-removed-in-4-1",
            "fixer": false,
            "used_in": null
          }
        ],
        "changes": null,
        "python": {
          "target": "3.12",
          "current": "3.9",
          "packages": [
            {
              "name": "pillow",
              "current": "9.4.0",
              "spec": null,
              "latest": "12.3.0",
              "status": "upgrade",
              "upgrade_to": "10.0.0",
              "phase": null,
              "reason": "9.4.0 no wheel for Python 3.12, pip builds it from source",
              "notes": [],
              "last_release": null,
              "source": null,
              "built_into_django": null,
              "prerelease": null,
              "majors_crossed": null,
              "changelog_url": null,
              "repository_url": null,
              "direct": true,
              "origin": "requirements.txt:18",
              "evidence": [],
              "upstream": []
            },
            {
              "name": "psycopg2-binary",
              "current": "2.9.5",
              "spec": null,
              "latest": "2.9.13",
              "status": "upgrade",
              "upgrade_to": "2.9.9",
              "phase": null,
              "reason": "2.9.5 no wheel for Python 3.12, pip builds it from source",
              "notes": [],
              "last_release": null,
              "source": null,
              "built_into_django": null,
              "prerelease": null,
              "majors_crossed": null,
              "changelog_url": null,
              "repository_url": null,
              "direct": true,
              "origin": "requirements.txt:17",
              "evidence": [],
              "upstream": []
            }
          ],
          "ready": 0,
          "pure": 16,
          "silent": ["django-allauth"],
          "not_checked": [],
          "django_note": "No Django 3.2 release declares Python 3.12: switch Python together with Django"
        },
        "explain": {}
      },
      {
        "schema_version": 1,
        "kind": "report",
        "tool": {
          "name": "django-upgrade-report",
          "version": "1.1.0",
          "author": "Daniel Kurdoghlian, Pushing Pixels (https://pushingpixels.at)"
        },
        "generated": "2026-10-10T07:15:05.679489+00:00",
        "framework": "django",
        "target": "5.2",
        "target_released": true,
        "current_framework": "4.2.30",
        "framework_requires_python": ">=3.10",
        "current_django": "4.2.30",
        "django_requires_python": ">=3.10",
        "project_python": "3.9",
        "source": "requirements.txt",
        "warnings": [
          "Django 5.2 needs Python >=3.10, your project uses 3.9 (from .python-version)"
        ],
        "notices": [],
        "counts": {
          "ready": 1,
          "upgrade": 10,
          "check": 3,
          "blocked": 0
        },
        "packages": [
          {
            "name": "django-allauth",
            "current": "0.55.0",
            "spec": null,
            "latest": "65.19.7",
            "status": "upgrade",
            "upgrade_to": "65.7.0",
            "phase": "before",
            "reason": "65.7.0 declares Django 5.2",
            "notes": ["crosses 10 major versions"],
            "last_release": "2026-10-01T12:35:20.844382+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 10,
            "changelog_url": "https://codeberg.org/allauth/django-allauth/src/branch/main/ChangeLog.rst",
            "repository_url": null,
            "direct": true,
            "origin": "requirements.txt:7",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-celery-beat",
            "current": "2.5.0",
            "spec": null,
            "latest": "2.9.0",
            "status": "upgrade",
            "upgrade_to": "2.8.0",
            "phase": "before",
            "reason": "2.8.0 declares Django 5.2",
            "notes": [],
            "last_release": "2026-02-28T16:45:32.822974+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/celery/django-celery-beat/releases",
            "repository_url": "https://github.com/celery/django-celery-beat",
            "direct": true,
            "origin": "requirements.txt:9",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-cors-headers",
            "current": "3.14.0",
            "spec": null,
            "latest": "4.9.0",
            "status": "upgrade",
            "upgrade_to": "4.7.0",
            "phase": "before",
            "reason": "4.7.0 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2025-09-18T10:40:50.843353+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst",
            "repository_url": "https://github.com/adamchainz/django-cors-headers",
            "direct": true,
            "origin": "requirements.txt:4",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-crispy-forms",
            "current": "2.1",
            "spec": null,
            "latest": "2.7",
            "status": "upgrade",
            "upgrade_to": "2.4",
            "phase": "before",
            "reason": "2.4 declares Django 5.2",
            "notes": [],
            "last_release": "2026-07-29T11:12:11.052238+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://github.com/django-crispy-forms/django-crispy-forms/releases",
            "repository_url": "https://github.com/django-crispy-forms/django-crispy-forms",
            "direct": true,
            "origin": "requirements.txt:6",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-debug-toolbar",
            "current": "4.0.0",
            "spec": null,
            "latest": "8.0.0",
            "status": "upgrade",
            "upgrade_to": "5.1.0",
            "phase": "before",
            "reason": "5.1.0 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-09-01T18:27:55.018746+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html",
            "repository_url": "https://github.com/django-commons/django-debug-toolbar",
            "direct": true,
            "origin": "requirements.txt:5",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-environ",
            "current": "0.11.2",
            "spec": null,
            "latest": "0.14.0",
            "status": "upgrade",
            "upgrade_to": "0.13.0",
            "phase": "before",
            "reason": "0.13.0 declares Django 5.2",
            "notes": ["crosses 2 major versions"],
            "last_release": "2026-06-18T22:49:54.355797+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://django-environ.readthedocs.org/en/latest/changelog.html",
            "repository_url": "https://github.com/joke2k/django-environ",
            "direct": true,
            "origin": "requirements.txt:11",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-extensions",
            "current": "3.2.3",
            "spec": null,
            "latest": "4.1",
            "status": "upgrade",
            "upgrade_to": "4.0",
            "phase": "before",
            "reason": "4.0 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2025-04-11T01:15:37.701755+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md",
            "repository_url": "https://github.com/django-extensions/django-extensions",
            "direct": true,
            "origin": "requirements.txt:12",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-filter",
            "current": "23.1",
            "spec": null,
            "latest": "26.2",
            "status": "upgrade",
            "upgrade_to": "25.1",
            "phase": "before",
            "reason": "25.1 declares Django 5.2",
            "notes": ["crosses 2 major versions"],
            "last_release": "2026-10-03T12:00:59.162313+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 2,
            "changelog_url": "https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst",
            "repository_url": "https://github.com/carltongibson/django-filter",
            "direct": true,
            "origin": "requirements.txt:3",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-import-export",
            "current": "3.3.0",
            "spec": null,
            "latest": "4.4.1",
            "status": "upgrade",
            "upgrade_to": "4.3.6",
            "phase": "before",
            "reason": "4.3.6 declares Django 5.2",
            "notes": ["crosses a major version"],
            "last_release": "2026-05-05T12:42:42.554661+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 1,
            "changelog_url": "https://github.com/django-import-export/django-import-export/blob/main/docs/changelog.rst",
            "repository_url": "https://github.com/django-import-export/django-import-export",
            "direct": true,
            "origin": "requirements.txt:14",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "djangorestframework",
            "current": "3.15.0",
            "spec": null,
            "latest": "3.18.3",
            "status": "upgrade",
            "upgrade_to": "3.16.0",
            "phase": "before",
            "reason": "3.16.0 declares Django 5.2",
            "notes": [],
            "last_release": "2026-10-06T21:33:49.917036+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": 0,
            "changelog_url": "https://www.django-rest-framework.org/community/release-notes/",
            "repository_url": "https://github.com/encode/django-rest-framework",
            "direct": true,
            "origin": "requirements.txt:2",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-model-utils",
            "current": "4.4.0",
            "spec": null,
            "latest": "5.0.0",
            "status": "check",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django up to 5.0, not 5.2",
            "notes": [
              "no release in 2 years",
              "latest 5.0.0 declares Django up to 5.1, not 5.2"
            ],
            "last_release": "2024-09-04T11:35:22.858744+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/jazzband/django-model-utils/releases",
            "repository_url": "https://github.com/jazzband/django-model-utils",
            "direct": true,
            "origin": "requirements.txt:13",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-storages",
            "current": "1.14",
            "spec": null,
            "latest": "1.14.6",
            "status": "check",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django up to 4.2, not 5.2",
            "notes": ["latest 1.14.6 declares Django up to 5.1, not 5.2"],
            "last_release": "2025-04-02T02:34:53.291575+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/jschneier/django-storages/releases",
            "repository_url": "https://github.com/jschneier/django-storages",
            "direct": true,
            "origin": "requirements.txt:8",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-taggit",
            "current": "5.0.1",
            "spec": null,
            "latest": "6.1.0",
            "status": "check",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django up to 4.2, not 5.2",
            "notes": [
              "no release in 2 years",
              "latest 6.1.0 declares Django up to 5.0, not 5.2"
            ],
            "last_release": "2024-09-29T08:07:14.612190+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/jazzband/django-taggit/releases",
            "repository_url": "https://github.com/jazzband/django-taggit",
            "direct": true,
            "origin": "requirements.txt:15",
            "evidence": [],
            "upstream": []
          },
          {
            "name": "django-reversion",
            "current": "6.2.0",
            "spec": null,
            "latest": "6.3.0",
            "status": "ready",
            "upgrade_to": null,
            "phase": null,
            "reason": "declares Django 5.2",
            "notes": [],
            "last_release": "2026-06-12T19:55:45.381980+00:00",
            "source": null,
            "built_into_django": null,
            "prerelease": null,
            "majors_crossed": null,
            "changelog_url": "https://github.com/etianen/django-reversion/releases",
            "repository_url": "https://github.com/etianen/django-reversion",
            "direct": true,
            "origin": "requirements.txt:16",
            "evidence": [],
            "upstream": []
          }
        ],
        "not_on_index": [],
        "not_checked": [],
        "external": [],
        "skipped_non_django": 5,
        "unused": [],
        "removals": [
          {
            "version": "5.0",
            "text": "The SERIALIZE test setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented django.utils.baseconv module is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented django.utils.datetime_safe module is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The default value of the USE_TZ setting is changed from False to True",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The default sitemap protocol for sitemaps built outside the context of a request is changed from 'http' to 'https'",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The extra_tests argument for DiscoverRunner.build_suite() and DiscoverRunner.run_tests() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.contrib.postgres.aggregates.ArrayAgg, JSONBAgg, and StringAgg aggregates no longer return [], [], and '', respectively, when there are no rows",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The USE_L10N setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The USE_DEPRECATED_PYTZ transitional setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Support for pytz timezones is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The is_dst argument is removed from:",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin classes are removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented BaseForm._html_output() method is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The ability to return a str, rather than a SafeString, when rendering an ErrorDict and ErrorList is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The SitemapIndexItem.__str__() method is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The CSRF_COOKIE_MASKED transitional setting is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The name argument of django.utils.functional.cached_property() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The opclasses argument of django.contrib.postgres.constraints.ExclusionConstraint is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The undocumented ability to pass errors=None to SimpleTestCase.assertFormError() and assertFormsetError() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "django.contrib.sessions.serializers.PickleSerializer is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The usage of QuerySet.iterator() on a queryset that prefetches related objects without providing the chunk_size argument is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Passing unsaved model instances to related filters is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "created=True is required in the signature of RemoteUserBackend.configure_user() subclasses",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Support for logging out via GET requests in the django.contrib.auth.views.LogoutView and django.contrib.auth.views.logout_then_login() is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.utils.timezone.utc alias to datetime.timezone.utc is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Passing a response object and a form/formset name to SimpleTestCase.assertFormError() and assertFormSetError() is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The django.contrib.gis.admin.OpenLayersWidget is removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The \"django/forms/default.html\" and \"django/forms/formsets/default.html\" templates are removed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "The default form and formset rendering style is changed to the div-based",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.0",
            "text": "Passing nulls_first=False or nulls_last=False to Expression.asc() and Expression.desc() methods, and the OrderBy expression is no longer allowed",
            "url": "https://docs.djangoproject.com/en/5.0/releases/5.0/#features-removed-in-5-0",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The BaseUserManager.make_random_password() method is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The model's Meta.index_together option is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The length_is template filter is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The django.contrib.auth.hashers.SHA1PasswordHasher, django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher, and django.contrib.auth.hashers.UnsaltedMD5PasswordHasher are removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The model django.contrib.postgres.fields.CICharField, django.contrib.postgres.fields.CIEmailField, and django.contrib.postgres.fields.CITextField are removed, except for support in historical migrations",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The django.contrib.postgres.fields.CIText mixin is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The map_width and map_height attributes of BaseGeometryWidget are removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The SimpleTestCase.assertFormsetError() method is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": true,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The TransactionTestCase.assertQuerysetEqual() method is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "Support for passing encoded JSON string literals to JSONField and associated lookups and expressions is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "Support for passing positional arguments to Signer and TimestampSigner is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The DEFAULT_FILE_STORAGE and STATICFILES_STORAGE settings is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          },
          {
            "version": "5.1",
            "text": "The django.core.files.storage.get_storage_class() function is removed",
            "url": "https://docs.djangoproject.com/en/5.1/releases/5.1/#features-removed-in-5-1",
            "fixer": false,
            "used_in": null
          }
        ],
        "changes": null,
        "python": {
          "target": "3.12",
          "current": "3.9",
          "packages": [
            {
              "name": "pillow",
              "current": "9.4.0",
              "spec": null,
              "latest": "12.3.0",
              "status": "upgrade",
              "upgrade_to": "10.0.0",
              "phase": null,
              "reason": "9.4.0 no wheel for Python 3.12, pip builds it from source",
              "notes": [],
              "last_release": null,
              "source": null,
              "built_into_django": null,
              "prerelease": null,
              "majors_crossed": null,
              "changelog_url": null,
              "repository_url": null,
              "direct": true,
              "origin": "requirements.txt:18",
              "evidence": [],
              "upstream": []
            },
            {
              "name": "psycopg2-binary",
              "current": "2.9.5",
              "spec": null,
              "latest": "2.9.13",
              "status": "upgrade",
              "upgrade_to": "2.9.9",
              "phase": null,
              "reason": "2.9.5 no wheel for Python 3.12, pip builds it from source",
              "notes": [],
              "last_release": null,
              "source": null,
              "built_into_django": null,
              "prerelease": null,
              "majors_crossed": null,
              "changelog_url": null,
              "repository_url": null,
              "direct": true,
              "origin": "requirements.txt:17",
              "evidence": [],
              "upstream": []
            }
          ],
          "ready": 4,
          "pure": 12,
          "silent": ["django-allauth"],
          "not_checked": [],
          "django_note": null
        },
        "explain": {}
      }
    ]
  }
}
