Release Notes
...
from tzlocal import get_localzone TIME_ZONE = get_localzone().zone
This works similar to settings.TIME_ZONE = None
except that it also sets os.environ['TZ']
. Let us know if there’s a use case where you find you can’t adapt your code to set a TIME_ZONE
.
...
Read-only fields are wrapped in <div class="readonly">...</div>
instead of <p>...</p>
to allow any kind of HTML as the field’s content.
Changes due to the introduction of template-based widget rendering
Jira Legacy | ||||||||
---|---|---|---|---|---|---|---|---|
|
Some undocumented classes in django.forms.widgets
are removed:
...
from django.db import models class MyModel(models.Model): ... @models.permalink def url(self): return ('guitarist_detail', [self.slug])
becomes:
from django.db import models from django.urls import reverse class MyModel(models.Model): ... def url(self): return reverse('guitarist_detail', args=[self.slug])
Miscellaneous¶
contrib.auth
’slogin()
andlogout()
function-based views are deprecated in favor of new class-based viewsLoginView
andLogoutView
.- The unused
extra_context
parameter ofcontrib.auth.views.logout_then_login()
is deprecated. contrib.auth
’spassword_change()
,password_change_done()
,password_reset()
,password_reset_done()
,password_reset_confirm()
, andpassword_reset_complete()
function-based views are deprecated in favor of new class-based viewsPasswordChangeView
,PasswordChangeDoneView
,PasswordResetView
,PasswordResetDoneView
,PasswordResetConfirmView
, andPasswordResetCompleteView
.django.test.runner.setup_databases()
is moved todjango.test.utils.setup_databases()
. The old location is deprecated.django.utils.translation.string_concat()
is deprecated in favor ofdjango.utils.text.format_lazy()
.string_concat(*strings)
can be replaced byformat_lazy('{}' * len(strings), *strings)
.- For the
PyLibMCCache
cache backend, passingpylibmc
behavior settings as top-level attributes ofOPTIONS
is deprecated. Set them under abehaviors
key withinOPTIONS
instead. - The
host
parameter ofdjango.utils.http.is_safe_url()
is deprecated in favor of the newallowed_hosts
parameter. - Silencing exceptions raised while rendering the
{% include %}
template tag is deprecated as the behavior is often more confusing than helpful. In Django 2.1, the exception will be raised. DatabaseIntrospection.get_indexes()
is deprecated in favor ofDatabaseIntrospection.get_constraints()
.authenticate()
now passes arequest
argument to theauthenticate()
method of authentication backends. Support for methods that don’t acceptrequest
as the first positional argument will be removed in Django 2.1.- The
USE_ETAGS
setting is deprecated in favor ofConditionalGetMiddleware
which now adds theETag
header to responses regardless of the setting.CommonMiddleware
anddjango.utils.cache.patch_response_headers()
will no longer set ETags when the deprecation ends. Model._meta.has_auto_field
is deprecated in favor of checking ifModel._meta.auto_field is not None
.- Using regular expression groups with
iLmsu#
inurl()
is deprecated. The only group that’s useful is(?i)
for case-insensitive URLs, however, case-insensitive URLs aren’t a good practice because they create multiple entries for search engines, for example. An alternative solution could be to create ahandler404
that looks for uppercase characters in the URL and redirects to a lowercase equivalent. - The
renderer
argument is added to theWidget.render()
method. Methods that don’t accept that argument will work through a deprecation period.