========================Django 1.0 release notes========================Welcome to Django 1.0!We've been looking forward to this moment for over three years, and it's finallyhere. Django 1.0 represents the largest milestone in Django's development todate: a web framework that a group of perfectionists can truly be proud of.Django 1.0 represents over three years of community development as an OpenSource project. Django's received contributions from hundreds of developers,been translated into fifty languages, and today is used by developers on everycontinent and in every kind of job.An interesting historical note: when Django was first released in July 2005, theinitial released version of Django came from an internal repository at revisionnumber 8825. Django 1.0 represents revision 8961 of our public repository. Itseems fitting that our 1.0 release comes at the moment where communitycontributions overtake those made privately.Stability and forwards-compatibility====================================The release of Django 1.0 comes with a promise of APIstability and forwards-compatibility. In a nutshell, this means that code youdevelop against Django 1.0 will continue to work against 1.1 unchanged, and youshould need to make only minor changes for any 1.X release.See the :doc:`API stability guide </misc/api-stability>` for full details.Backwards-incompatible changes==============================Django 1.0 has a number of backwards-incompatible changes from Django 0.96. Ifyou have apps written against Django 0.96 that you need to port, see ourdetailed porting guide:.. toctree:::maxdepth: 11.0-porting-guideA complete list of backwards-incompatible changes can be found athttps://code.djangoproject.com/wiki/BackwardsIncompatibleChanges.What's new in Django 1.0========================A *lot*!Since Django 0.96, we've made over 4,000 code commits, fixed more than 2,000bugs, and edited, added, or removed around 350,000 lines of code. We've alsoadded 40,000 lines of new documentation, and greatly improved what was alreadythere.In fact, new documentation is one of our favorite features of Django 1.0, so wemight as well start there. First, there's a new documentation site:* https://docs.djangoproject.com/The documentation has been greatly improved, cleaned up, and generally madeawesome. There's now dedicated search, indexes, and more.We can't possibly document everything that's new in 1.0, but the documentationwill be your definitive guide. Anywhere you see something like:.. versionadded:: 1.0This feature is new in Django 1.0You'll know that you're looking at something new or changed.The other major highlights of Django 1.0 are:Refactored admin application----------------------------The Django administrative interface (``django.contrib.admin``) has beencompletely refactored; admin definitions are now completely decoupled from modeldefinitions (no more ``class Admin`` declaration in models!), rewritten to useDjango's new form-handling library (introduced in the 0.96 release as``django.newforms``, and now available as simply ``django.forms``) andredesigned with extensibility and customization in mind. Full documentation forthe admin application is available online in the official Django documentation:See the :doc:`admin reference </ref/contrib/admin/index>` for detailsImproved Unicode handling-------------------------Django's internals have been refactored to use Unicode throughout; thisdrastically simplifies the task of dealing with non-Western-European content anddata in Django. Additionally, utility functions have been provided to easeinteroperability with third-party libraries and systems which may or may nothandle Unicode gracefully. Details are available in Django's Unicode-handlingdocumentation.See :doc:`/ref/unicode`.An improved ORM---------------Django's object-relational mapper -- the component which provides the mappingbetween Django model classes and your database, and which mediates your databasequeries -- has been dramatically improved by a massive refactoring. For mostusers of Django this is backwards-compatible; the public-facing API for databasequerying underwent a few minor changes, but most of the updates took place inthe ORM's internals. A guide to the changes, including backwards-incompatiblemodifications and mentions of new features opened up by this refactoring, is`available on the Django wiki`__.__ https://code.djangoproject.com/wiki/QuerysetRefactorBranchAutomatic escaping of template variables----------------------------------------To provide improved security against cross-site scripting (XSS) vulnerabilities,Django's template system now automatically escapes the output of variables. Thisbehavior is configurable, and allows both variables and larger templateconstructs to be marked as safe (requiring no escaping) or unsafe (requiringescaping). A full guide to this feature is in the documentation for the:ttag:`autoescape` tag.``django.contrib.gis`` (GeoDjango)----------------------------------A project over a year in the making, this adds world-class GIS (`GeographicInformation Systems`_) support to Django, in the form of a ``contrib``application. Its documentation is currently being maintained externally, andwill be merged into the main Django documentation shortly. Huge thanks go toJustin Bronn, Jeremy Dunck, Brett Hoerner and Travis Pinney for their efforts increating and completing this feature.See :doc:`GeoDjango </ref/contrib/gis/index>` for details... _Geographic Information Systems: https://en.wikipedia.org/wiki/Geographic_information_systemPluggable file storage----------------------Django's built-in ``FileField`` and ``ImageField`` now can take advantage ofpluggable file-storage backends, allowing extensive customization of where andhow uploaded files get stored by Django. For details, see :doc:`the filesdocumentation </topics/files>`; big thanks go to Marty Alchin for putting in thehard work to get this completed.Jython compatibility--------------------Thanks to a lot of work from Leo Soto during a Google Summer of Code project,Django's codebase has been refactored to remove incompatibilities with`Jython`_, an implementation of Python written in Java, which runs Python codeon the Java Virtual Machine. Django is now compatible with the forthcomingJython 2.5 release... _Jython: https://www.jython.org/Generic relations in forms and admin------------------------------------Classes are now included in ``django.contrib.contenttypes`` which can be used tosupport generic relations in both the admin interface and in end-user forms. See:ref:`the documentation for generic relations <generic-relations>` for details.``INSERT``/``UPDATE`` distinction---------------------------------Although Django's default behavior of having a model's ``save()`` methodautomatically determine whether to perform an ``INSERT`` or an ``UPDATE`` at theSQL level is suitable for the majority of cases, there are occasional situationswhere forcing one or the other is useful. As a result, models can now support anadditional parameter to ``save()`` which can force a specific operation.See :ref:`ref-models-force-insert` for details.Split ``CacheMiddleware``-------------------------Django's ``CacheMiddleware`` has been split into three classes:``CacheMiddleware`` itself still exists and retains all of its previousfunctionality, but it is now built from two separate middleware classes whichhandle the two parts of caching (inserting into and reading from the cache)separately, offering additional flexibility for situations where combining thesefunctions into a single middleware posed problems.Full details, including updated notes on appropriate use, are in :doc:`thecaching documentation </topics/cache>`.Refactored ``django.contrib.comments``--------------------------------------As part of a Google Summer of Code project, Thejaswi Puthraya carried out amajor rewrite and refactoring of Django's bundled comment system, greatlyincreasing its flexibility and customizability.Removal of deprecated features------------------------------A number of features and methods which had previously been marked as deprecated,and which were scheduled for removal prior to the 1.0 release, are no longerpresent in Django. These include imports of the form library from``django.newforms`` (now located simply at ``django.forms``), the``form_for_model`` and ``form_for_instance`` helper functions (which have beenreplaced by ``ModelForm``) and a number of deprecated features which werereplaced by the dispatcher, file-uploading and file-storage refactoringintroduced in the Django 1.0 alpha releases.Known issues============We've done our best to make Django 1.0 as solid as possible, but unfortunatelythere are a couple of issues that we know about in the release.Multi-table model inheritance with ``to_field``-----------------------------------------------If you're using :ref:`multiple table model inheritance<multi-table-inheritance>`, be aware of this caveat: child models using a custom``parent_link`` and ``to_field`` will cause database integrity errors. A set ofmodels like the following are **not valid**::class Parent(models.Model):name = models.CharField(max_length=10)other_value = models.IntegerField(unique=True)class Child(Parent):father = models.OneToOneField(Parent, primary_key=True, to_field="other_value", parent_link=True)value = models.IntegerField()This bug will be fixed in the next release of Django.Caveats with support of certain databases-----------------------------------------Django attempts to support as many features as possible on all databasebackends. However, not all database backends are alike, and in particular many of the supported database differ greatly from version to version. It's a good idea to checkout our :doc:`notes on supported database </ref/databases>`:- :ref:`mysql-notes`- :ref:`sqlite-notes`- :ref:`oracle-notes`