Django 1.11.1 release notes

May 6, 2017

Django 1.11.1 adds a minor feature and fixes several bugs in 1.11.

Allowed disabling server-side cursors on PostgreSQL

The change in Django 1.11 to make QuerySet.iterator() use server-side cursors on PostgreSQL prevents running Django with PgBouncer in transaction pooling mode. To reallow that, use the DISABLE_SERVER_SIDE_CURSORS setting in DATABASES.

See Transaction pooling and server-side cursors for more discussion.

Bugfixes

  • Made migrations respect Index’s name argument. If you created a named index with Django 1.11, makemigrations will create a migration to recreate the index with the correct name (#28051).
  • Fixed a crash when using a __icontains lookup on a ArrayField (#28038).
  • Fixed a crash when using a 2-tuple in EmailMessage’s attachments argument (#28042).
  • Fixed QuerySet.filter() crash when it references the name of a OneToOneField primary key (#28047).
  • Fixed empty POST data table appearing instead of “No POST data” in HTML debug page (#28079).
  • Restored BoundFields without any choices evaluating to True (#28058).
  • Prevented SessionBase.cycle_key() from losing session data if _session_cache isn’t populated (#28066).
  • Fixed layout of ReadOnlyPasswordHashWidget (used in the admin’s user change page) (#28097).
  • Allowed prefetch calls on managers with custom ModelIterable subclasses (#28096).
  • Fixed change password link in the contrib.auth admin for el, es_MX, and pt translations (#28100).
  • Restored the output of the class attribute in the <ul> of widgets that use the multiple_input.html template. This fixes ModelAdmin.radio_fields with admin.HORIZONTAL (#28059).
  • Fixed crash in BaseGeometryWidget.subwidgets() (#28039).
  • Fixed exception reraising in ORM query execution when cursor.execute() fails and the subsequent cursor.close() also fails (#28091).
  • Fixed a regression where CheckboxSelectMultiple, NullBooleanSelect, RadioSelect, SelectMultiple, and Select localized option values (#28075).
  • Corrected the stack level of unordered queryset pagination warnings (#28109).
  • Fixed a regression causing incorrect queries for __in subquery lookups when models use ForeignKey.to_field (#28101).
  • Fixed crash when overriding the template of django.views.static.directory_index() (#28122).
  • Fixed a regression in formset min_num validation with unchanged forms that have initial data (#28130).
  • Prepared for cx_Oracle 6.0 support (#28138).
  • Updated the contrib.postgres SplitArrayWidget to use template-based widget rendering (#28040).
  • Fixed crash in BaseGeometryWidget.get_context() when overriding existing attrs (#28105).
  • Prevented AddIndex and RemoveIndex from mutating model state (#28043).
  • Prevented migrations from dropping database indexes from Meta.indexes when changing Field.db_index to False (#28052).
  • Fixed a regression in choice ordering in form fields with grouped and non-grouped options (#28157).
  • Fixed crash in BaseInlineFormSet._construct_form() when using save_as_new (#28159).
  • Fixed a regression where Model._state.db wasn’t set correctly on multi-table inheritance parent models after saving a child model (#28166).
  • Corrected the return type of ArrayField(CITextField()) values retrieved from the database (#28161).
  • Fixed QuerySet.prefetch_related() crash when fetching relations in nested Prefetch objects (#27554).
  • Prevented hiding GDAL errors if it’s not installed when using contrib.gis (#28160). (It’s a required dependency as of Django 1.11.)
  • Fixed a regression causing __in lookups on a foreign key to fail when using the foreign key’s parent model as the lookup value (#28175).