February 1, 2016
Django 1.9.2 fixes a security regression in 1.9 and several bugs in 1.9.1. It also makes a small backwards incompatible change that hopefully doesn't affect any users.
ModelAdmin’s with save_as=True¶If a ModelAdmin uses save_as=True (not the default), the admin
provides an option when editing objects to "Save as new". A regression in
Django 1.9 prevented that form submission from raising a "Permission Denied"
error for users without the "add" permission.
.py-tpl files rewritten in project/app templates¶The addition of some Django template language syntax to the default app
template in Django 1.9 means those files now have some invalid Python syntax.
This causes difficulties for packaging systems that unconditionally
byte-compile *.py files.
To remedy this, a .py-tpl suffix is now used for the project and app
template files included in Django. The .py-tpl suffix is replaced with
.py by the startproject and startapp commands. For example, a
template with the filename manage.py-tpl will be created as manage.py.
Please file a ticket if you have a custom project template containing
.py-tpl files and find this behavior problematic.
ConditionalGetMiddleware causing If-None-Match
checks to always return HTTP 200 (#26024).db_index=True or unique=True to a
CharField or TextField that already had the other specified, or when
removing one of them from a field that had both, or when adding
unique=True to a field already listed in unique_together
(#26034).USE_X_FORWARDED_PORT=True
(#26094).QuerySet.order_by() crash when ordering by a relational field of
a ManyToManyField through model (#26092).DEBUG is True on
distributions that increase the SQLITE_MAX_VARIABLE_NUMBER compile-time
limit to over 2000, such as Debian (#26063).OneToOneField in
ModelAdmin.readonly_fields (#26060).migrate command in a test case with the
available_apps attribute pointing to an application with migrations
disabled using the MIGRATION_MODULES setting (#26135).Node.token.source[0]. This was an undocumented,
private API. The origin is now available directly on each node using the
Node.origin attribute (#25848).SimpleLazyObject
with copy.copy() (#26122).geometry_field in the GeoJSON serializer output regardless
of the fields parameter (#26138).contrib.gis map widgets when using
USE_THOUSAND_SEPARATOR=True (#20415).8月 01, 2018