==========================
Django 1.8.1 release notes
==========================

*May 1, 2015*

Django 1.8.1 fixes several bugs in 1.8 and includes some optimizations in the
migrations framework.

Bugfixes
========

* Added support for serializing :class:`~datetime.timedelta` objects in
  migrations (:ticket:`24566`).

* Restored proper parsing of the :djadmin:`testserver` command's positional
  arguments (fixture names) (:ticket:`24571`).

* Prevented ``TypeError`` in translation functions ``check_for_language()`` and
  ``get_language_bidi()`` when translations are deactivated (:ticket:`24569`).

* Fixed :djadmin:`squashmigrations` command when using
  :class:`~django.db.migrations.operations.SeparateDatabaseAndState`
  (:ticket:`24278`).

* Stripped microseconds from ``datetime`` values when using an older version of
  the MySQLdb DB API driver as it does not support fractional seconds
  (:ticket:`24584`).

* Fixed a migration crash when altering
  :class:`~django.db.models.ManyToManyField`\s (:ticket:`24513`).

* Fixed a crash with ``QuerySet.update()`` on foreign keys to one-to-one fields
  (:ticket:`24578`).

* Fixed a regression in the model detail view of
  :mod:`~django.contrib.admindocs` when a model has a reverse foreign key
  relation (:ticket:`24624`).

* Prevented arbitrary file inclusions in :mod:`~django.contrib.admindocs`
  (:ticket:`24625`).

* Fixed a crash with ``QuerySet.update()`` on foreign keys to instances with
  ``uuid`` primary keys (:ticket:`24611`).

* Fixed database introspection with SQLite 3.8.9 (released April 8, 2015)
  (:ticket:`24637`).

* Updated ``urlpatterns`` examples generated by :djadmin:`startproject` to
  remove usage of referencing views by dotted path in
  ``django.conf.urls.url()`` which is deprecated in Django 1.8
  (:ticket:`24635`).

* Fixed queries where an expression was referenced in ``order_by()``, but
  wasn't part of the select clause. An example query is
  ``qs.annotate(foo=F('field')).values('pk').order_by('foo'))``
  (:ticket:`24615`).

* Fixed a database table name quoting regression (:ticket:`24605`).

* Prevented the loss of ``null``/``not null`` column properties during field
  alteration of MySQL databases (:ticket:`24595`).

* Fixed JavaScript path of ``contrib.admin``’s related field widget when using
  alternate static file storages (:ticket:`24655`).

* Fixed a migration crash when adding new relations to models
  (:ticket:`24573`).

* Fixed a migration crash when applying migrations with model managers on
  Python 3 that were generated on Python 2 (:ticket:`24701`).

* Restored the ability to use iterators as queryset filter arguments
  (:ticket:`24719`).

* Fixed a migration crash when renaming the target model of a many-to-many
  relation (:ticket:`24725`).

* Removed flushing of the test database with :option:`test --keepdb`, which
  prevented apps with data migrations from using the option (:ticket:`24729`).

* Fixed ``makemessages`` crash in some locales (:ticket:`23271`).

* Fixed help text positioning of ``contrib.admin`` fields that use the
  ``ModelAdmin.filter_horizontal`` and ``filter_vertical`` options
  (:ticket:`24676`).

* Fixed ``AttributeError: function 'GDALAllRegister' not found`` error when
  initializing ``contrib.gis`` on Windows.

Optimizations
=============

* Changed ``ModelState`` to deepcopy fields instead of deconstructing and
  reconstructing (:ticket:`24591`). This speeds up the rendering of model
  states and reduces memory usage when running :djadmin:`manage.py migrate
  <migrate>` (although other changes in this release may negate any performance
  benefits).
