{"title":"Django 1.2.4 release notes","version":"dev","locale":"en","docname":"releases/1.2.4","url":"/en/dev/releases/1.2.4/","canonical":"https://djangodocs.dev/en/dev/releases/1.2.4/","summary":"Welcome to Django 1.2.4! This is the fourth “bugfix” release in the Django 1.2 series, improving the stability and performance of the Django 1.2 codebase.","html":"<h1>Django 1.2.4 release notes<a class=\"heading-anchor\" href=\"#django-1-2-4-release-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Welcome to Django 1.2.4!</p>\n<p>This is the fourth “bugfix” release in the Django 1.2 series,\nimproving the stability and performance of the Django 1.2 codebase.</p>\n<p>With one exception, Django 1.2.4 maintains backwards compatibility\nwith Django 1.2.3. It also contains a number of fixes and other\nimprovements. Django 1.2.4 is a recommended upgrade for any\ndevelopment or deployment currently using or targeting Django 1.2.</p>\n<p>For full details on the new features, backwards incompatibilities, and\ndeprecated features in the 1.2 branch, see the <a class=\"reference internal\" href=\"/en/dev/releases/1.2/\"><span class=\"doc\">Django 1.2 release notes</span></a>.</p>\n<section id=\"backwards-incompatible-changes\">\n<h2>Backwards incompatible changes<a class=\"heading-anchor\" href=\"#backwards-incompatible-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"restricted-filters-in-admin-interface\">\n<h3>Restricted filters in admin interface<a class=\"heading-anchor\" href=\"#restricted-filters-in-admin-interface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The Django administrative interface, <code class=\"docutils literal notranslate\">django.contrib.admin</code>, supports\nfiltering of displayed lists of objects by fields on the corresponding\nmodels, including across database-level relationships. This is\nimplemented by passing lookup arguments in the querystring portion of\nthe URL, and options on the ModelAdmin class allow developers to\nspecify particular fields or relationships which will generate\nautomatic links for filtering.</p>\n<p>One historically-undocumented and -unofficially-supported feature has\nbeen the ability for a user with sufficient knowledge of a model’s\nstructure and the format of these lookup arguments to invent useful\nnew filters on the fly by manipulating the querystring.</p>\n<p>However, it has been demonstrated that this can be abused to gain\naccess to information outside of an admin user’s permissions; for\nexample, an attacker with access to the admin and sufficient knowledge\nof model structure and relations could construct query strings which –\nwith repeated use of regular-expression lookups supported by the\nDjango database API – expose sensitive information such as users’\npassword hashes.</p>\n<p>To remedy this, <code class=\"docutils literal notranslate\">django.contrib.admin</code> will now validate that\nquerystring lookup arguments either specify only fields on the model\nbeing viewed, or cross relations which have been explicitly\nallowed by the application developer using the preexisting\nmechanism mentioned above. This is backwards-incompatible for any\nusers relying on the prior ability to insert arbitrary lookups.</p>\n</section>\n</section>\n<section id=\"one-new-feature\">\n<h2>One new feature<a class=\"heading-anchor\" href=\"#one-new-feature\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ordinarily, a point release would not include new features, but in the\ncase of Django 1.2.4, we have made an exception to this rule.</p>\n<p>One of the bugs fixed in Django 1.2.4 involves a set of\ncircumstances whereby a running a test suite on a multiple database\nconfiguration could cause the original source database (i.e., the\nactual production database) to be dropped, causing catastrophic loss\nof data. In order to provide a fix for this problem, it was necessary\nto introduce a new setting – <a class=\"reference internal\" href=\"/en/dev/ref/settings/#std-setting-TEST_DEPENDENCIES\"><code class=\"xref std std-setting docutils literal notranslate\">TEST_DEPENDENCIES</code></a> – that\nallows you to define any creation order dependencies in your database\nconfiguration.</p>\n<p>Most users – even users with multiple-database configurations – need\nnot be concerned about the data loss bug, or the manual configuration of\n<a class=\"reference internal\" href=\"/en/dev/ref/settings/#std-setting-TEST_DEPENDENCIES\"><code class=\"xref std std-setting docutils literal notranslate\">TEST_DEPENDENCIES</code></a>. See the <a class=\"extlink-ticket reference external\" href=\"https://code.djangoproject.com/ticket/14415\">original problem report</a>\ndocumentation on <a class=\"reference internal\" href=\"/en/dev/topics/testing/advanced/#topics-testing-creation-dependencies\"><span class=\"std std-ref\">controlling the creation order of test\ndatabases</span></a> for details.</p>\n</section>\n<section id=\"geodjango\">\n<h2>GeoDjango<a class=\"heading-anchor\" href=\"#geodjango\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The function-based <a class=\"reference internal\" href=\"/en/dev/ref/settings/#std-setting-TEST_RUNNER\"><code class=\"xref std std-setting docutils literal notranslate\">TEST_RUNNER</code></a> previously used to execute\nthe GeoDjango test suite, <code class=\"docutils literal notranslate\">django.contrib.gis.tests.run_gis_tests</code>,\nwas finally deprecated in favor of a class-based test runner,\n<code class=\"docutils literal notranslate\">django.contrib.gis.tests.GeoDjangoTestSuiteRunner</code>, added in this\nrelease.</p>\n<p>In addition, the GeoDjango test suite is now included when\n<a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-code/unit-tests/#running-unit-tests\"><span class=\"std std-ref\">running the Django test suite</span></a> with <code class=\"docutils literal notranslate\">runtests.py</code>\nand using <a class=\"reference internal\" href=\"/en/dev/ref/contrib/gis/db-api/#spatial-backends\"><span class=\"std std-ref\">spatial database backends</span></a>.</p>\n</section>","rootId":"django-1-2-4-release-notes","toc":[{"title":"Backwards incompatible changes","anchor":"backwards-incompatible-changes","children":[{"title":"Restricted filters in admin interface","anchor":"restricted-filters-in-admin-interface","children":[]}]},{"title":"One new feature","anchor":"one-new-feature","children":[]},{"title":"GeoDjango","anchor":"geodjango","children":[]}],"breadcrumbs":[{"docname":"releases/index","title":"Release notes","url":"/en/dev/releases/"}],"prev":{"docname":"releases/1.2.5","title":"Django 1.2.5 release notes","url":"/en/dev/releases/1.2.5/"},"next":{"docname":"releases/1.2.3","title":"Django 1.2.3 release notes","url":"/en/dev/releases/1.2.3/"},"formats":{"html":"/en/dev/releases/1.2.4/","markdown":"/en/dev/releases/1.2.4.md","json":"/en/dev/releases/1.2.4.json"},"source":"https://github.com/django/django/blob/main/docs/releases/1.2.4.txt","official":"https://docs.djangoproject.com/en/dev/releases/1.2.4/","inVersions":["dev","6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9","1.8"],"inLocales":["en"]}