Django 2.0リリースノート—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.0.x/releases/2.0
移動先:案内検索

Django2.0リリースノート

2017年12月2日

Django 2.0へようこそ!

これらのリリースノートには、の新機能と、Django1.11以前からアップグレードするときに注意が必要な後方互換性のない変更が含まれています。 非推奨サイクルの終わりに達したいくつかの機能削除し、いくつかの機能の非推奨プロセスを開始しました。

このリリースでは、Djangoによる緩い形式のセマンティックバージョニングの使用が開始されますが、2.0リリースで予想されるような後方互換性のない大きな変更はありません。 アップグレードは、過去の機能リリースと同じくらいの労力である必要があります。

既存のプロジェクトを更新する場合は、 Djangoを新しいバージョンにアップグレードするガイドを参照してください。

Pythonの互換性

Django 2.0は、Python 3.4、3.5、3.6、および3.7をサポートしています。 強くお勧めします。各シリーズの最新リリースのみを公式にサポートします。

Django 1.11.xシリーズは、Python2.7をサポートする最後のシリーズです。

Django 2.0は、Python3.4をサポートする最後のリリースシリーズになります。 Django 2.0のサポート終了(2019年4月)を超えてPython 3.4のデプロイを計画している場合は、代わりにDjango 1.11 LTS(2020年4月までサポート)を使用してください。 ただし、Python3.4の保守終了は2019年3月であることに注意してください。


古いバージョンのDjangoに対するサードパーティライブラリのサポート

Django 2.0のリリース後、サードパーティのアプリ作成者は、1.11より前のすべてのバージョンのDjangoのサポートを終了することをお勧めします。 その時点で、python -Wdを使用してパッケージのテストを実行できるはずです。これにより、非推奨の警告が表示されます。 非推奨の警告を修正した後、アプリはDjango2.0と互換性があるはずです。


Django2.0の新機能

簡略化されたURLルーティング構文

新しい django.urls.path()関数を使用すると、よりシンプルで読みやすいURLルーティング構文が可能になります。 たとえば、以前のDjangoリリースの次の例は次のとおりです。

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),

次のように書くことができます:

path('articles/<int:year>/', views.year_archive),

新しい構文は、URLパラメーターの型強制をサポートします。 この例では、ビューはyearキーワード引数を文字列ではなく整数として受け取ります。 また、書き直された例では、一致するURLの制約がわずかに少なくなっています。 たとえば、年の整数は正規表現の場合のように正確に4桁の長さに制限されていないため、10000年は一致するようになります。

以前のバージョンのdjango.conf.urls.url()関数は、 django.urls.re_path()として利用できるようになりました。 古い場所は、差し迫った非推奨なしに、下位互換性のために残されています。 古いdjango.conf.urls.include()関数がdjango.urlsからインポートできるようになったため、URLconfでfrom django.urls import include, path, re_pathを使用できます。

URLディスパッチャードキュメントは、新しい構文を特徴とし、詳細を提供するように書き直されています。


モバイル対応contrib.admin

管理者は応答性が高く、すべての主要なモバイルデバイスをサポートしています。 古いブラウザでは、さまざまなレベルの正常な劣化が発生する可能性があります。


ウィンドウ式

新しい Window 式を使用すると、クエリセットにOVER句を追加できます。 式では、ウィンドウ関数および集計関数を使用できます。


マイナーな機能

django.contrib.admin


django.contrib.auth

  • PBKDF2パスワードハッシャーのデフォルトの反復回数が36,000から100,000に増加しました。


django.contrib.gis


django.contrib.postgres

  • ArrayAgg の新しいdistinct引数は、連結された値が区別されるかどうかを決定します。
  • 新しい RandomUUID データベース関数は、バージョン4のUUIDを返します。 新しい CryptoExtension 移行操作を使用してアクティブ化できるPostgreSQLのpgcrypto拡張機能を使用する必要があります。
  • django.contrib.postgres.indexes.GinIndex は、fastupdateおよびgin_pending_list_limitパラメーターをサポートするようになりました。
  • 新しい GistIndex クラスを使用すると、データベースにGiSTインデックスを作成できます。 新しい BtreeGistExtension 移行操作は、btree_gist拡張機能をインストールして、組み込みではないオペレータークラスのサポートを追加します。
  • :djadmin: `inspectdb` は、JSONFieldおよびさまざまなRangeFieldをイントロスペクトできるようになりました(django.contrib.postgresINSTALLED_APPSに含まれている必要があります)。


django.contrib.sitemaps

  • protocolキーワード引数を GenericSitemap コンストラクターに追加しました。


キャッシュ

  • cache.set_many()は、挿入に失敗したキーのリストを返すようになりました。 組み込みのバックエンドの場合、挿入の失敗はmemcachedでのみ発生する可能性があります。


ファイルストレージ

  • File.open()は、コンテキストマネージャーとして使用できます。 with file.open() as f:


フォーム

  • SplitDateTimeWidget および SplitHiddenDateTimeWidget の新しいdate_attrsおよびtime_attrs引数により、DateInputおよび [に異なるHTML属性を指定できます。 X183X](または非表示の)サブウィジェット。
  • 新しい Form.errors.get_json_data()メソッドは、JSON応答に含めるのに適した辞書としてフォームエラーを返します。


一般的なビュー


管理コマンド

  • :djadmin: `inspectdb` は、MySQLの符号なし整数列をPositiveIntegerFieldまたはPositiveSmallIntegerFieldに変換するようになりました。
  • 新しいmakemessages --add-locationオプションは、POファイルのコメント形式を制御します。
  • :djadmin: `loaddata` がstdin から読み取ることができるようになりました。
  • 新しいdiffsettings --outputオプションを使用すると、出力を統一された差分形式でフォーマットできます。
  • Oracleでは、列がID列として作成されている場合、:djadmin: `inspectdb`AutoFieldをイントロスペクトできるようになりました。
  • MySQLで、:djadmin: `dbshell` がクライアント側のTLS証明書をサポートするようになりました。


移行

  • 新しいsquashmigrations --squashed-nameオプションを使用すると、押しつぶされた移行に名前を付けることができます。


モデル


リクエストとレスポンス


テンプレート

  • サードパーティアプリでの Engine.get_default()の有用性を高めるために、TEMPLATESで複数のDjangoTemplatesエンジンが構成されている場合、[を上げるのではなく、最初のエンジンを返すようになりました。 X191X] 。
  • カスタムテンプレートタグは、キーワードのみの引数を受け入れることができるようになりました。


テスト


バリデーター

  • 新しい ProhibitNullCharactersValidator は、 CharField フォームフィールドとそのサブクラスの入力でのヌル文字を禁止します。 脆弱性スキャンツールからヌル文字入力が観察されました。 ほとんどのデータベースはヌル文字をサイレントに破棄しますが、psycopg2 2.7以降では、PostgreSQLでヌル文字をchar / textフィールドに保存しようとすると例外が発生します。


2.0での後方互換性のない変更

一部の場所でバイト文字列のサポートを削除しました

ネイティブのPython2文字列をサポートするには、古いバージョンのDjangoはバイト文字列とUnicode文字列の両方を受け入れる必要がありました。 Python 2のサポートが廃止されたため、バイト文字列は入出力境界の周囲でのみ検出されるはずです(たとえば、バイナリフィールドやHTTPストリームの処理)。 Djangoは特定のコードパスでバイト文字列を受け入れなくなるため、コードを更新してバイト文字列の使用を最小限に抑える必要がある場合があります。 Pythonの-bオプションは、コード内のその間違いを検出するのに役立つ場合があります。

たとえば、reverse()は、force_text()の代わりにstr()を使用して、受信したargsおよびkwargsを、 URL。 バイト文字列の場合、これにより、不要なbプレフィックスと追加の引用符(str(b'foo')"b'foo'")を含む文字列が作成されます。 適応するには、バイト文字列をreverse()に渡す前に、バイト文字列でdecode()を呼び出します。


データベースバックエンドAPI

このセクションでは、サードパーティのデータベースバックエンドで必要になる可能性のある変更について説明します。

  • DatabaseOperations.datetime_cast_date_sql()datetime_cast_time_sql()datetime_trunc_sql()datetime_extract_sql()、およびdate_interval_sql()メソッドは、SQLとパラメータのリスト。
  • サードパーティのデータベースバックエンドは、バックエンドが動作するデータベースの名前とともにDatabaseWrapper.display_name属性を追加する必要があります。 Djangoは、システムチェックなど、さまざまなメッセージで使用する場合があります。
  • SchemaEditor._alter_column_type_sql()の最初の引数は、tableではなくmodelになりました。
  • SchemaEditor._create_index_name()の最初の引数は、modelではなくtable_nameになりました。
  • FOR UPDATE OFのサポートを有効にするには、DatabaseFeatures.has_select_for_update_of = Trueを設定します。 データベースでOFの引数をテーブルではなく列にする必要がある場合は、DatabaseFeatures.select_for_update_of_column = Trueを設定します。
  • Window 式のサポートを有効にするには、DatabaseFeatures.supports_over_clauseTrueに設定します。 DatabaseOperations.window_start_rows_start_end()および/またはwindow_start_range_start_end()メソッドをカスタマイズする必要がある場合があります。
  • サードパーティのデータベースバックエンドは、max_lengthの場合、CharFieldCast 関数で使用されるデータベースデータ型のDatabaseOperations.cast_char_field_without_max_length属性を追加する必要があります。引数は提供されていません。
  • DatabaseCreation._clone_test_db()get_test_db_clone_settings()の最初の引数は、numberではなくsuffixになりました(一貫性を保つためにバックエンドの署名の名前を変更する場合)。 django.testも、これらの値を整数ではなく文字列として渡すようになりました。
  • サードパーティのデータベースバックエンドは、BaseDatabaseIntrospectionのスタブに基づいてDatabaseIntrospection.get_sequences()メソッドを追加する必要があります。


Oracle11.2のサポートを終了しました

Oracle11.2のアップストリームサポートの終了は12月です。 2020. Django 1.11は、ほぼこの日付に達する2020年4月までサポートされます。 Django 2.0は、Oracle12.1以降を公式にサポートしています。


デフォルトのMySQL分離レベルは読み取りコミット

MySQLのデフォルトの分離レベルである繰り返し可能な読み取りは、一般的なDjangoの使用法でデータ損失を引き起こす可能性があります。 これを防ぎ、他のデータベースとの一貫性を保つために、デフォルトの分離レベルが読み取りコミットされるようになりました。 必要に応じて、:setting: `DATABASES` 設定を使用して別の分離レベルを使用できます。


AbstractUser.last_name max_length increased to 150

django.contrib.auth.models.User.last_name の移行が含まれています。 AbstractUserから継承するカスタムユーザーモデルがある場合は、ユーザーモデルのデータベース移行を生成して適用する必要があります。

姓の30文字の制限を保持する場合は、カスタムフォームを使用します。

from django.contrib.auth.forms import UserChangeForm

class MyUserChangeForm(UserChangeForm):
    last_name = forms.CharField(max_length=30, required=False)

ユーザーを編集するときに管理者でこの制限を維持したい場合は、次のフォームを使用するようにUserAdmin.formを設定してください。

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
    form = MyUserChangeForm

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

QuerySet.reverse()およびlast()はスライス後に禁止されています

スライスされたクエリセットでQuerySet.reverse()またはlast()を呼び出すと、並べ替え後にスライスが適用されるため、予期しない結果が発生します。 これは現在禁止されています。例:

>>> Model.objects.all()[:2].reverse()
Traceback (most recent call last):
...
TypeError: Cannot reverse a query once a slice has been taken.

フォームフィールドは、オプションの引数を位置引数として受け入れなくなりました

フォームフィールド引数の誤った順序によるランタイムエラーを防ぐために、組み込みフォームフィールドのオプションの引数は位置引数として受け入れられなくなりました。 例えば:

forms.IntegerField(25, 10)

例外が発生するため、次のように置き換える必要があります。

forms.IntegerField(max_value=25, min_value=10)

call_command()は、受け取ったオプションを検証します

call_command()は、呼び出されるコマンドの引数パーサーがcall_command()に渡されるすべてのオプションを定義することを検証するようになりました。

parser.add_argument()を使用して作成されていないオプションを使用するカスタム管理コマンドの場合、コマンドにstealth_options属性を追加します。

class MyCommand(BaseCommand):
    stealth_options = ('option_name', ...)

インデックスは位置引数を受け入れなくなりました

例えば:

models.Index(['headline', '-pub_date'], 'index_name')

例外が発生するため、次のように置き換える必要があります。

models.Index(fields=['headline', '-pub_date'], name='index_name')

SQLiteで外部キー制約が有効になりました

外部キー制約に違反している既存のモデルインスタンスを保存しようとすると、これは後方互換性のない変更(IntegrityError: FOREIGN KEY constraint failed)として表示されます。

外部キーは、DEFERRABLE IMMEDIATEではなくDEFERRABLE INITIALLY DEFERREDで作成されるようになりました。 したがって、特に次のようなパターンを使用している場合は、新しい定義で外部キーを再作成するためにテーブルを再構築する必要がある場合があります。

from django.db import transaction

with transaction.atomic():
    Book.objects.create(author_id=1)
    Author.objects.create(id=1)

外部キーをDEFERREDとして再作成しない場合、外部キー制約が適用されるため、最初のcreate()は失敗します。

最初にデータベースをバックアップしてください! Django 2.0にアップグレードした後、次のようなスクリプトを使用してテーブルを再構築できます。

from django.apps import apps
from django.db import connection

for app in apps.get_app_configs():
    for model in app.get_models(include_auto_created=True):
        if model._meta.managed and not (model._meta.proxy or model._meta.swapped):
            for base in model.__bases__:
                if hasattr(base, '_meta'):
                    base._meta.local_many_to_many = []
            model._meta.local_many_to_many = []
            with connection.schema_editor() as editor:
                editor._remake_table(model)

このスクリプトは広範なテストを受けておらず、複数のデータベースなどのさまざまなケースに適応する必要があります。 気軽に改善に貢献してください。

さらに、SQLiteのテーブル変更の制限により、トランザクション内の他のモデルによって参照されるモデルまたはフィールドに対して RenameModel および RenameField 操作を実行することは禁止されています。 これらの操作を含む移行を適用できるようにするには、Migration.atomic属性をFalseに設定する必要があります。


その他

  • SessionAuthenticationMiddlewareクラスが削除されました。 Django 1.10ではセッション認証が無条件に有効になっているため、機能は提供されませんでした。

  • デフォルトのHTTPエラーハンドラー(handler404など)は、点線のPythonパス文字列ではなく呼び出し可能になりました。 Djangoは、パフォーマンスとデバッグエクスペリエンスが向上するため、呼び出し可能な参照を優先します。

  • [[Django/docs/3.0.x/ref/class-based-views/base#django.views.generic.base|]] は、pattern_nameが存在しない場合に、NoReverseMatchを無音にすることはなくなりました。

  • :setting: `USE_L10N` がオフの場合、 FloatField および DecimalField:setting:` DECIMAL_SEPARATOR` およびを尊重するようになりました:設定:検証中の `THOUSAND_SEPARATOR` 。 たとえば、次の設定を使用します。

    USE_L10N = False
    USE_THOUSAND_SEPARATOR = True
    DECIMAL_SEPARATOR = ','
    THOUSAND_SEPARATOR = '.'

    "1.345"の入力は、1.345ではなく1345に変換されるようになりました。

  • AbstractBaseUser のサブクラスは、get_short_name()およびget_full_name()を実装するために不要になりました。 (NotImplementedErrorを発生させる基本実装は削除されます。)django.contrib.adminは、実装されている場合はこれらのメソッドを使用しますが、必須ではありません。 これらの方法を使用するサードパーティのアプリは、同様のアプローチを採用することをお勧めします。

  • FIRST_DAY_OF_WEEKおよびNUMBER_GROUPING形式の設定は、JavaScriptおよびJSONi18nビュー出力で整数として保持されるようになりました。

  • assertNumQueries()は、接続構成クエリを無視するようになりました。 以前は、テストで新しいデータベース接続が開かれた場合、それらのクエリはassertNumQueries()カウントの一部として含まれる可能性がありました。

  • Oracleテスト表領域のデフォルトサイズが20Mから50Mに増加し、デフォルトの自動拡張サイズが10Mから25Mに増加しました。

  • データベースから大きな結果セットをストリーミングするときのパフォーマンスを向上させるために、 QuerySet.iterator()は一度に100行ではなく2000行をフェッチするようになりました。 chunk_sizeパラメーターを使用すると、古い動作を復元できます。 例えば:

    Book.objects.iterator(chunk_size=100)
  • JavaScriptCatalog ビューのpackages引数に不明なパッケージ名を指定すると、サイレントに渡される代わりにValueErrorが発生するようになりました。

  • モデルインスタンスの主キーがデフォルトのModel.__str__()メソッドに表示されるようになりました。 Question object (1)

  • makemigrationsは、モデルフィールドlimit_choices_toオプションへの変更を検出するようになりました。 これを既存の移行に追加するか、それを使用するフィールドに対して自動生成された移行を受け入れます。

  • 自動空間変換を必要とするクエリを実行すると、変換されていないジオメトリをサイレントに使用する代わりに、MySQLでNotImplementedErrorが発生するようになりました。

  • django.core.exceptions.DjangoRuntimeWarningが削除されました。 これは、CacheKeyWarningRuntimeWarningの継承の中間クラスとしてキャッシュバックエンドでのみ使用されました。

  • BaseExpression._output_fieldの名前をoutput_fieldに変更しました。 カスタム式の更新が必要になる場合があります。

  • 古いバージョンでは、フォームとフォームセットは、MediaとウィジェットMediaを連結して結合します。 結合は、各リストの要素の相対的な順序を維持しようとしますMediaOrderConflictWarningは、注文を保持できない場合に発行されます。

  • django.contrib.gis.gdal.OGRExceptionが削除されました。 Django 1.8以降、GDALExceptionのエイリアスになっています。

  • GEOS3.3.xのサポートは終了しました。

  • GeometryFieldのデータの選択方法が変更され、パフォーマンスが向上しました。生のSQLクエリでは、これらのフィールドをconnection.ops.selectでラップする必要があります。 例については、GISチュートリアルの Rawクエリノートを参照してください。


2.0で廃止された機能

Field.from_db_value()およびExpression.convert_value()のcontext引数

Field.from_db_value()およびExpression.convert_value()context引数は、常に空の辞書であるため、使用されません。 両方のメソッドのシグネチャは次のとおりです。

(self, value, expression, connection)

それ以外の:

(self, value, expression, connection, context)

カスタムフィールドと式での古い署名のサポートは、Django3.0まで残ります。


その他

  • django.db.backends.postgresql_psycopg2モジュールは非推奨になり、django.db.backends.postgresqlが優先されます。 これは、Django1.9以降のエイリアスです。 これは、モジュールから直接インポートするコードにのみ影響します。 DATABASES設定でも'django.db.backends.postgresql_psycopg2'を使用できますが、Django1.9で追加された'django.db.backends.postgresql'名を使用して簡略化できます。
  • django.shortcuts.render_to_response()は非推奨になり、 django.shortcuts.render()が優先されます。 render()は、requestも必要とすることを除いて、同じ引数を取ります。
  • DEFAULT_CONTENT_TYPE設定は非推奨になりました。 HTML5がほとんどXHTMLに取って代わったため、サードパーティのアプリとうまく相互作用せず、廃止されました。
  • HttpRequest.xreadlines()は非推奨になり、リクエストを反復処理することになりました。
  • QuerySet.earliest()および QuerySet.latest()へのfield_nameキーワード引数は、フィールド名を引数として渡すために非推奨になりました。 .earliest(field_name='pub_date')の代わりに.earliest('pub_date')と書いてください。


2.0で削除された機能

これらの機能は非推奨サイクルの終わりに達し、Django2.0で削除されました。

これらの機能の使用を削除する方法など、これらの変更の詳細については、1.9 で非推奨となった機能を参照してください。

  • django.dispatch.signals.Signal.disconnect()weak引数が削除されました。
  • django.db.backends.base.BaseDatabaseOperations.check_aggregate_support()が削除されました。
  • django.forms.extrasパッケージが削除されました。
  • assignment_tagヘルパーが削除されました。
  • SimpleTestCase.assertsRedirects()host引数が削除されました。 パスが同一である場合に絶対URLが相対URLと等しいと見なされるようにする互換性レイヤーも削除されます。
  • Field.relField.remote_field.toが削除されます。
  • ForeignKeyおよびOneToOneFieldon_delete引数は、モデルおよび移行で必要になりました。 更新する移行の数が少なくなるように、移行を縮小することを検討してください。
  • django.db.models.fields.add_lazy_relation()が削除されました。
  • タイムゾーンのサポートが有効になっている場合、タイムゾーンをサポートしないデータベースバックエンドは、ORMの外部で実行されるSQLクエリにパラメータとして渡されるときに、認識された日時をUTCのナイーブな値に変換しなくなります。 cursor.execute()で。
  • django.contrib.auth.tests.utils.skipIfCustomUser()が削除されました。
  • GeoManagerおよびGeoQuerySetクラスが削除されました。
  • django.contrib.gis.geoipモジュールが削除されました。
  • テンプレートローダーのsupports_recursionチェックは以下から削除されました。
    • django.template.engine.Engine.find_template()
    • django.template.loader_tags.ExtendsNode.find_template()
    • django.template.loaders.base.Loader.supports_recursion()
    • django.template.loaders.cached.Loader.supports_recursion()
  • load_templateおよびload_template_sourcesテンプレートローダーメソッドが削除されました。
  • テンプレートローダーのtemplate_dirs引数が削除されました。
    • django.template.loaders.base.Loader.get_template()
    • django.template.loaders.cached.Loader.cache_key()
    • django.template.loaders.cached.Loader.get_template()
    • django.template.loaders.cached.Loader.get_template_sources()
    • django.template.loaders.filesystem.Loader.get_template_sources()
  • django.template.loaders.base.Loader.__call__()が削除されました。
  • exceptionパラメーターを受け入れないカスタムエラービューのサポートが削除されました。
  • django.utils.feedgenerator.Atom1Feedおよびdjango.utils.feedgenerator.RssFeedmime_type属性が削除されました。
  • include()app_name引数が削除されました。
  • include()への最初の引数として3タプル(admin.site.urlsを含む)を渡すためのサポートが削除されました。
  • アプリケーション名前空間なしでURLインスタンス名前空間を設定するためのサポートが削除されました。
  • Field._get_val_from_obj()が削除されました。
  • django.template.loaders.eggs.Loaderが削除されました。
  • contrib.auth関数ベースのビューのcurrent_appパラメーターが削除されました。
  • SimpleTestCase.assertRaisesMessage()へのcallable_objキーワード引数が削除されました。
  • ModelAdminメソッドのallow_tags属性のサポートが削除されました。
  • SyndicationFeed.add_item()へのenclosureキーワード引数が削除されました。
  • django.template.base.Origindjango.template.loader.LoaderOriginおよびdjango.template.base.StringOriginエイリアスが削除されました。

これらの変更の詳細については、 1.10 で非推奨となった機能を参照してください。

  • makemigrations --exitオプションが削除されました。
  • 逆外部キーまたは多対多関係への直接割り当てのサポートが削除されました。
  • django.contrib.gis.geos.GEOSGeometryget_srid()およびset_srid()メソッドが削除されました。
  • django.contrib.gis.geos.Pointget_x()set_x()get_y()set_y()get_z()、およびset_z()メソッド]が削除されます。
  • django.contrib.gis.geos.Pointget_coords()およびset_coords()メソッドが削除されました。
  • django.contrib.gis.geos.MultiPolygoncascaded_unionプロパティが削除されました。
  • django.utils.functional.allow_lazy()が削除されました。
  • shell --plainオプションが削除されました。
  • django.core.urlresolversモジュールが削除され、新しい場所django.urlsが優先されます。
  • CommaSeparatedIntegerFieldは、過去の移行でのサポートを除いて、削除されました。
  • テンプレートContext.has_key()メソッドが削除されました。
  • django.core.files.storage.Storage.accessed_time()created_time()、およびmodified_time()メソッドのサポートが削除されました。
  • Meta.default_related_nameが設定されている場合のモデル名を使用したクエリルックアップのサポートが削除されました。
  • MySQL __searchルックアップが削除されました。
  • _apply_rel_filters()メソッドなしでカスタム関連のマネージャークラスをサポートするためのシムが削除されました。
  • プロパティではなくメソッドとしてUser.is_authenticated()およびUser.is_anonymous()を使用することはサポートされなくなりました。
  • Model._meta.virtual_fields属性が削除されます。
  • Field.contribute_to_class()のキーワード引数virtual_onlyおよびModel._meta.add_field()virtualが削除されました。
  • javascript_catalog()およびjson_catalog()ビューが削除されます。
  • django.contrib.gis.utils.precision_wkt()が削除されました。
  • マルチテーブル継承では、OneToOneFieldからparent_linkへの暗黙的な昇格が削除されます。
  • Widget._format_value()のサポートは削除されました。
  • FileFieldメソッドget_directory_name()およびget_filename()は削除されました。
  • mark_for_escaping()関数とそれが使用するクラス:EscapeDataEscapeBytesEscapeTextEscapeString、およびEscapeUnicodeはNS。
  • escapeフィルターはdjango.utils.html.conditional_escape()を使用するようになりました。
  • Manager.use_for_related_fieldsが削除されました。
  • モデルManagerの継承は、MRO継承ルールに従います。 Meta.manager_inheritance_from_futureを使用して動作にオプトインする必要がなくなりました。
  • settings.MIDDLEWARE_CLASSESを使用した古いスタイルのミドルウェアのサポートは削除されました。