April 1, 2015
Selamat datang di Django 1.8!
Catatan terbitan ini mencangkup new features, sama halnya beberapa backwards incompatible changes anda akan ingin waspadai ketika meningkatkan dari Django 1.7 atau versi terlama. Kami juga telah begun the deprecation process for some features, dan beberapa telah dicapai pada akhir pengolahan pengusangan mereka dan have been removed.
Lihat panduan Bagaimana meningkatkan Django ke versi terbaru jika anda sedang memperbaharui proyek yang ada.
Django 1.8 has been designated as Django's second long-term support release. It will receive security updates for at least three years after its release. Support for the previous LTS, Django 1.4, will end 6 months from the release date of Django 1.8.
Django 1.8 membutuhkan Python 2.7, 3.2, 3.3, 3.4 atau 3.5. Kami sangat menganjurkan dan hanya secara resmi mendukung terbitan terakhir dari setiap rangkaian.
Django 1.8 adalah terbitan pertama untuk mendukung Python 3.5.
Karena akhir dari dukungan hulu untuk Python 3,2 di Februari 2016, kami tidak akan mencoba Django 1.8.x di Python 3.2 setelah akhir dari 2016.
Model._meta
¶Django sekarang telah memerumuskan API untuk Model._meta, menyediakan sebuah cara dukungan resmi pada retrieve fields dan bidang penyaring berdasarkan pada attributes mereka.
The Model._meta
object has been part of Django since the days of pre-0.96
"Magic Removal" -- it just wasn't an official, stable API. In recognition of
this, we've endeavored to maintain backwards-compatibility with the old
API endpoint where possible. However, API endpoints that aren't part of the
new official API have been deprecated and will eventually be removed.
Django 1.8 menentukan API stabil untuk menyatukan backend cetakan. Itu menyertakan dukungan siap-pakai untuk bahasa cetakan Django dan untuk Jinja2
. Itu mendukung membangun cetakan dengan banyak mesin dalam proyek sama. Pelajari lebih tentang fitur baru di topic guide dan tingkatkan petunjuk-petunjuk dalam versi terlama dari dokumentasi.
Several features of the django-secure third-party library have been
integrated into Django. django.middleware.security.SecurityMiddleware
provides several security enhancements to the request/response cycle. The new
check --deploy
option allows you to check your production settings
file for ways to increase the security of your site.
Django sekarang mempunyai sebuah modul dengan perpanjangan untuk fitur-fitur khusus PostgreSQL , seperti pencarian ArrayField
, HStoreField
, Bidang Jangkauan, dan unaccent
. Sebuah uraian penuh dari fitur tersedia in the documentation.
UUIDField
untuk menyimpan penciri unik universal. Itu disimpan sebagai jenis dara uuid
asli di PostgreSQL dan sebagaibidang karakter panjang tetap di backend lain. Ada sebuah form field
yang sesuai.DurationField
untuk menyimpan periode waktu - model di Python oleh timedelta
. Itu disimpan dalam jenis data interval
asli di PostgreSQL, sebagai sebuah INTERVAL DAY(9) TO SECOND(6)
di Oracle, dan sebagai bigint
dari mikrodetik di backend lain. Tanggal dan waktu terkait aritmatik juga telah ditingkatkan pada semua backend. Ada sebuah form field
yang berhubungan.Query Expressions mengizinkan anda membuat, menyesuaikan, dan menyusun pernyataan SQL rumit. Ini mempunyai keterangan diadakan untuk menerima pernyataan selaind ari pengumpulan. Pengumpulan sekarang dapat mengacu banyak bidang, sama halnya aritmatika, mirip pada obyek F()
. order_by()
juga mendapatkan kemampuan menerima pernyataan.
Conditional Expressions mengizinkan anda menggunakan logika if
... elif
... else
dalam permintaan.
Sebuah kumpulan dari database functions juga disertakan dengan kegunaan seperti Coalesce
, Concat
, dan Substr
.
TestCase
¶TestCase
telah direfaktor untuk mengizinkan untuk inisialisasi data pada tingkatan kelas menggunakan transaksi dan titik simpan. Backend basisdata yang tidak mendukung transaksi, seperti MySQL dengan penyimpanan MyISAM, akan masih dapat menjalankan percobaan ini tetapi tidak akan bermanfaat dari perbaikan. Percobaan sekarang berjalan dalam dua blok atomic()
bersarang: satu untuk keseluruhan kelas dan untuk setiap percobaan.
TestCase.setUpTestData()
adds
the ability to set up test data at the class level. Using this technique can
speed up the tests as compared to using setUp()
.TestCase
is now performed once for the whole
TestCase
.django.contrib.admin
¶ModelAdmin
sekarang mempunyai sebuah metode has_module_permission()
untuk mengizinkan membatasi akses pada modul di halaman indeks admin.InlineModelAdmin
sekarang mempunyai sebuah atribut show_change_link
yang mendukung menampilkan sebuah tautan ke berderet formulir rubah obyek.django.contrib.admin.RelatedOnlyFieldListFilter
baru di ModelAdmin.list_filter
untuk membatasi pilihan list_filter
pada obyek asing yang dilampirkan untuk mereka dari ModelAdmin
.ModelAdmin.delete_view()
menampilkan ringkasan dari obyek untuk dihapus pada jalaman penegasan penghapusan.AdminSite.site_url
untuk menampilkan sebuah tautan ke situs front-end.+ModelAdmin.show_full_result_count
untuk mengendalikan apakah atau tidak hitungan penuh obyek harus ditampilkan pada halaman admin tersaring.AdminSite.password_change()
sekarang mempunyai sebuah parameter extra_context
.AdminSite.has_permission()
dan AdminSite.login_form
. Cetakan base.html
mempunyai blok baru usertools
yang mengandung kepala khusus-pengguna. Sebuah variabel konteks baru has_permission
, yang mendapatkan nilainya dari has_permission()
, menandakan apakah pengguna dapat mengakses situs.django.contrib.admindocs
¶django.contrib.auth
¶PermissionDenied
di has_perm()
dan has_module_perms()
pada pemeriksaan perizinan sirkit-pendek.PasswordResetForm
sekarang mempunyai metode send_mail()
yang dapat ditimpa untuk menyesuaikan surat untuk dikirim.max_length
dari Permission.name
telah ditingkatkan dari 50 menjadi 255 karakter. Harap jalankan perpindahan basisdata.USERNAME_FIELD
dan REQUIRED_FIELDS
sekarang mendukung ForeignKey
django.contrib.auth.hashers.PBKDF2PasswordHasher
untuk merubah nilai awal.django.contrib.gis
¶City.objects.filter(point__within=Country.objects.filter(continent='Africa').values('mpoly'))
.Collect
dan Extent
ketika versi basisdata adalah 3.0 atay terakhir.CREATE EXTENSION postgis
dan the SpatiaLite SELECT InitSpatialMetaData
sekarang secara otomatis dijalankan oleh migrate
.SpatialRefSys
dan GeometryColumns
berubah di Django 1.2 telah dipindahkan.GDALException
. Pendahulu OGRException
telah disimpan untuk kesesuaian kebelakang tetapi harus tidak digunakan lagi.django.contrib.sessions
¶flush()
dipanggil.django.contrib.sitemaps
¶Sitemap.i18n
baru mengizinkan anda untuk membangkitkan sebuah peta situs berdasarkan pada pengaturan LANGUAGES
.django.contrib.sites
¶get_current_site()
akan sekarang mencari situs saat ini berdasarkan pada request.get_host()
jika pengaturan SITE_ID
tidak ditentukan.Site
dibuat ketika menjalankan migrate
sekarang menghormati pengaturan SITE_ID
(sebagai gantinya dari selalu menggunakan pk=1
).incr()
dari backend django.core.cache.backends.locmem.LocMemCache
sekarang thread-safe.max_age
dari metode django.core.signing.TimestampSigner.unsign()
sekarang juga menerima sebuah obyek datetime.timedelta
.datetime
sebagai MySQL 5.6.4 dan mendukung sampai pecahan detik tergantung pada pernyataan dari bidang datetime (ketika DATETIME
menyertakan ketelitian pecahan lebih besar dari 0). Kolom basisdata datetime baru dibuat dengan Django 1.8 dan MySQL 5.6.4 dan sampai mendukung mikrodetik. Lihat MySQL database notes untuk rincian lebih.connection_persists_old_columns
sebagai True
. Sebagai gantinya, Oracle akan sekarang menyertakan sebuah klausa penghilang cache ketika mendapatkan gambaran.keyfile
dan certfile
dengan pengaturan EMAIL_SSL_CERTFILE
dan EMAIL_SSL_KEYFILE
.EmailBackend
sekarang mendukung pengaturan parameter timeout
dengan pengaturan EMAIL_TIMEOUT
.EmailMessage
dan EmailMultiAlternatives
sekarang mendukung parameter reply_to
.Storage.get_available_name()
dan Storage.save()
sekarang mengambil argumen max_length
untuk menerapkan batasan panjang nama berkas maksimal tingkat-penyimpanan. Nama berkas melampaui argumen ini akan dipotong. Ini mencegah kesalahan basisdata ketika menambahkan sebuah akhiran unik pada sebuah nama berkas panjang yang sudah ada di penyimpanan. Lihat deprecation note tentang menambahkan argumen ini ke penyesuaian kelas penyimpanan anda.True
atau False
sebagai atribut boolean HTML5.has_error()
barumengizinkan pemeriksaan jika kesalahan tertentu terjadi.required_css_class
ditentukan di sebuah formulir, kemudian etiket <label>
untuk bidang wajib akan mempunyai kelas ini hadir di atributnya.<ul>
) sekarang menyertakan nonfield
dalam daftarnya dari kelas-kelas untuk membedakan mereka dari kesalagan bidang-tertentu.Field
sekarang menerima sebuah argumen label_suffix
, yang akan menimpa label_suffix
formulir. Ini mengadakan penyesuaian akhiran pada berdasarkan per bidang - sebelumnya itu tidak memungkinkan untuk mengesampingkan sebuah label_suffix
formulir selagi menggunakan jalan pintas seperti {{ form.as_p }}
di cetakan.SelectDateWidget
sekarang menerima sebuah argumen empty_label
, yang akan menimpa label pilihan daftar teratas ketika DateField
tidak wajib.ImageField
telah dibersihkan dan disahkan, obyek UploadedFile
akan mempunyai sebuah tambahan atribut image
mengandung instance Image
Pillow digunakan untuk memeriksa jika berkas adalah nama sah. Itu juga akan memperbaharui UploadedFile.content_type
dengan jenis isi gambar seperti yang ditentukan oleh Pillow.ChoiceField
.MultipleObjectMixin
mungkin tidak menentukan urutan berlaku pada queryset
dengan mengatur ordering
atau menimpa get_ordering()
.SingleObjectMixin.query_pk_and_slug
baru mengizinkan merubah perilaku dari get_object()
sehingga itu akan menampilkan pencariannya menggunakan kedua primary key dan keong.get_form()
tidak membutuhkan sebuah form_class
untuk disediakan lagi. Jika tidak disediakan form_class
awalan pada get_form_class()
.ModelFormMixin.success_url
sekarang mendukung sintaksis str.format()
syntax. The legacy %(<foo>)s
Python masih didukung tetapi akan dipindahkan di Django 1.10.FORMAT_MODULE_PATH
sekarang dapat berupa sebuah daftar dari string mewakili jalur-jalur modul. Ini mengizinkan mengimpor beberapa bentuk modul dari aplikasi dapat digunakan yang berbeda. Itu juga mengizinkan menimpa bentuk penyesuaian tersebut di proyek Django utama anda.django.utils.log.AdminEmailHandler
sekarang mempunyai sebuah metode send_mail()
untuk membuatnya subkelas lebih ramah.dumpdata --output
baru mengizinkan menentukan sebuah berkas yang data diserialisasi ditulis.makemessages --exclude
dan compilemessages --exclude
baru mengizinkan mengeluarkan lokal tertentu dari pengolahan.compilemessages
sekarang mempunyai sebuah pilihan --use-fuzzy
atau -f
yang menyertakan terjemahan kabur kedalam berkas-berkas tersusun.loaddata --ignorenonexistent
sekarang mengabaikan data untuk model yang tidak lagi ada.runserver
sekarang menggunakan thread daemon untuk memuat kembali lebih cepat.inspectdb
sekarang mengeluarkan Meta.unique_together
. Itu juga dapat menginterospeksi AutoField
untuk basisdata MySQL dan PostgreSQL.call_command()
, nama pilihan dapat mencocokkan nama pilihan baris perintah (tanpa awalan tanda garis) atau nama variabel tujuan pilihan akhir, tetapi dalam kedua kasus, menghasilkan pilihan diterima oleh perintah sekarang selalu nama dest
ditentukan dalam pengertian pilihan perintah (selama perintah menggunakan modul argparse
).dbshell
sekarang mendukung pilihan pengaturan wewenang sertifikat SSL MySQL (--ssl-ca
).makemigrations --name
baru mengizinkan memberikan perpindahan sebuah penyesuaian nama daribada satu yang dibangkitkan.loaddata
sekarang mencegah memuat alat bantu berulang. Jika FIXTURE_DIRS
mengandung ganda atau jalur direktori alat bantu awalan (app_name/fixtures
), sebuah pengecualian dimunculkan.makemigrations --exit
mengizinkan keluar dengan sebuah kode kesalahan jika tidak ada perpindahan dibuat.showmigrations
baru mengizinkan mendaftarkan semua perpindahan dan ketergantungan mereka dalam sebuah proyek.CommonMiddleware.response_redirect_class
mengizinkan anda menyesuaikan pengalihan yang diterbitan oleh middleware.django.request
ketika middleware memunculkan sebuah pengecualian MiddlewareNotUsed
di suasana DEBUG
.RunSQL
sekarang dapat menangani parameter dilewatkan ke pernyataan SQL.RunPython.noop()
dan RunSQL.noop
telah ditambahkan untuk memudahkan dalam pembuatan operasi RunPython
dan RunSQL
yang dapat dibatalkan.RunPython
dan RunSQL
sekarang memanggil metode allow_migrate()
dari perute basisdata. Perute dapat menggunakan yang baru diperkenalkan argumen app_label
dan hints
untuk membuatkeputusan perutean. Untuk mengambil keuntungan dari fitur ini anda butuh memperbaharui ke tanda tangan allow_migrate
baru, lihat deprecation section untuk rincian lebih.connections.queries
, untuk mencegah penggunaan memori terlalu banyak di pengolahan berjalan-lama dalam suasana mencari kesalahan.Meta
model untuk menentukan sebuah default related name
untuk semua bidang berhubungan dari sebuah model.RuntimeWarning
ketika obyek-obyek ini tidak di pickle dalam versi berbeda daripada satu yang mereka telah di pickle.Model.from_db()
dimana pengguna Django menggunakan kapanpun obyek-obyek dimuat menggunakan ORM. Metode ini mengizinkan menyesuaikan perilaku memuat model.extra(select={...})
sekarang mengizinkan anda untuk meloloskan urutan %s
harfiah menggunakan %%s
.Transform.bilateral
baru mengizinkan membuat perubahan timbal balik. Terjemahan ini diberlakukan pada kedua lhs
dan rhs
ketika digunakan dalam pernyataan pencarian, menyediakan kesempatan untuk pencarian lebih mutakhir.contains
, startswith
, dll.) digunakan dengan sebuah ungkapan F()
sebagai sisi tangan-kanan. Di kasus-kasus tersebut, pelolosan dilakukan oleh basisdata, yang dapat membawa ke permintaan agak rumit melibatkan pemanggilan fungsi REPLACE
bersarang.Model.refresh_from_db()
.Model.get_deferred_fields()
.default
ini sekarang digunakan ketika bidang primary key disetel menjadi None
.(receiver, exception)
dikembalikan oleh Signal.send_robust()
sekarang mempunyai melacak kembali dilampirkan sebagai atribut __traceback__
.environ
, yang mengandung struktur lingkungan WSGI dari permintaan, telah ditambahkan ke sinyal request_started
.setting_changed()
dari django.core.signals
untuk menghindari memuat django.test
di keadaan bukan-percobaan. Django tidak lagi melalukannya sendiri.urlize
sekarang mendukung tautan hanya-ranah yang menyertakan karakter setelah ranah tingkat-atas (sebagai contoh djangoproject.com/
dan djangoproject.com/download/
).urlize
tidak memperlakukan tanda seruan pada akhir dari sebuah ranah atau string permintaannya sebagai bagian dari URL ( URL di sebagai contoh 'djangoproject.com!
adalah djangoproject.com
)locmem.Loader
yang memuat cetakan Django dari sebuah kamus Python.now
sekarang dapat menyimpan keluarannya di variabel konteks dengan sintaksis biasa: {% sekarang 'j n Y' sebagai varname %}
.WSGIRequest
sekarang menghormati jalur dimulai dengan //
.HttpRequest.build_absolute_uri()
sekarang menangani jalur dimulai dengan tepat //
.DEBUG
adalah True
dan sebuah permintaan memunculkan sebuah SuspiciousOperation
, tanggapan akan dibangun dengan halaman kesalahan rinci.query_string
dari QueryDict
sekarang pilihan, awalan ke None
, jadi QueryDict
kosong sekarang dapat di instansiasikan dengan QueryDict()
sebagai gantinya QueryDict(None)
atau QueryDict('')
.GET
dan POST
dari sebuah obyek HttpRequest
sekarang QueryDict
daripada kamus, dan atribut FILES
sekarang sebuah MultiValueDict
. Ini membawa kelas ini kedalam baris dengan dokumentasi dan dengan WSGIRequest
.HttpResponse.charset
telah ditambahkanWSGIRequestHandler
sekarang mengikuti RFC dalam merubah URI menjadi IRI, menggunakan uri_to_iri()
.HttpRequest.get_full_path()
sekarang meloloskan karakter tidak aman dari bagian jalur dari sebuah Uniform Resource Identifier (URI) dengan benar.HttpResponse
sekarang menerapkan sedikit tambahan motode seperti getvalue()
sehingga instance dapat digunakan sebagai obyek aliran.HttpResponse.setdefault()
baru mengizinkan mengatur sebuah kepala meskipun itu sudah disetel.FileResponse
baru pada berkas aliran.condition()
untuk pengolahan tampilan bersyarat sekarang mendukung kepala If-unmodified-since
.RequestFactory.trace()
dan Client.trace()
diterapkan, mengizinkan anda membuat permintaan TRACE
di percobaan anda.count
telah ditambahkan ke assertTemplateUsed()
. Ini mengizinkan anda untuk menegaskan bahwa sebuah cetakan telah membangun sejumlah kali tertentu.assertJSONNotEqual()
baru mengizinkan anda mencoba yang dua fragmen JSON tidak setara.test
untuk mempertahankan basisdata percobaan (--keepdb
), untuk menjalankan percobaan-percobaan kasus dalam urutan terbalik (--reverse
), dan untuk mengadakan pencatatan SQL untuk kegagalan percobaan (--debug-sql
).resolver_match
pada mencoba tanggapan klienDATAFILE
, DATAFILE_TMP
, DATAFILE_MAXSIZE
dan DATAFILE_TMP_MAXSIZE
.override_settings()
sekarang dapat mempengaruhi rute master dalam DATABASE_ROUTERS
.URLValidator
now supports IPv6 addresses,
Unicode domains, and URLs containing authentication data.Peringatan
Sebagai tambahan pada perubahan diuraikan dalam bagian ini, pastikan meninjau kembali deprecation plan untuk setiap fitur-fitur yang telah dipindahkan. Jika anda belum memperbaharui kode anda dalam linimasa pengusangan untuk fitur yang diberikan, perpindahannya mungkin muncul sebagai sebuah perubahan tidak sesuai kebelakang.
Catatan
To more easily allow in-memory usage of models, this change was reverted in
Django 1.8.4 and replaced with a check during model.save()
. For example:
>>> book = Book.objects.create(name="Django")
>>> book.author = Author(name="John")
>>> book.save()
Traceback (most recent call last):
...
ValueError: save() prohibited to prevent data loss due to unsaved related object 'author'.
Pemeriksaan mirip pada penugasan untuk membalikkan hubungan one-to-one telah dipindahkan di Django 1.8.5.
Menugaskan obyek tidak tersimpan pada sebuah ForeignKey
, GenericForeignKey
, dan OneToOneField
sekarang memunculkan ValueError
.
Previously, the assignment of an unsaved object would be silently ignored. For example:
>>> book = Book.objects.create(name="Django")
>>> book.author = Author(name="John")
>>> book.author.save()
>>> book.save()
>>> Book.objects.get(name="Django")
>>> book.author
>>>
Now, an error will be raised to prevent data loss:
>>> book.author = Author(name="john")
Traceback (most recent call last):
...
ValueError: Cannot assign "<Author: John>": "Author" instance isn't saved in the database.
Jika anda membutuhkan mengizinkan penugasan dari instance tidak disimpan (perilaku lama) dan tidak khawatir tentang kemungkinan kehilangan data (sebagai contoh anda tidak pernah menyimpan obyek-obyek ke basisdata), anda dapat meniadakan pemeriksaan ini dengan menggunakan atribut ForeignKey.allow_unsaved_instance_assignment
. (Atribut ini telah dipindahkan di 1.8.4 ketika itu tidak lagi bersangkut paut.)
Jika anda telah menulis sebuah penyesuaian perintah pengelolaan yang hanya menerima argumen penempatan dan anda tidak menentukan variabel perintah args
, anda mungkin mendapatkan sebuah kesalahan seperti Error: unrecognized arguments: ...
, ketika penguraian variabel sekarang berdasarkan pada argparse
yang tidak secara langsung menerima argumen penempatan. Anda dapat membuat perintah kesesuaian kebelakang anda dengan cukup mengatur variabel kelas args
. Bagaimanapun, jika anda tidak harus menhaga kesesuaian dengan versi Django terlama, itu adalah lebih baik menerapkan metode add_arguments()
baru seperti digambarkan di Bagaimana membuat perintah django-admin yang disesuaikan.
The method to add custom arguments to the test
management command through
the test runner has changed. Previously, you could provide an option_list
class variable on the test runner to add more arguments (à la
optparse
). Now to implement the same behavior, you have to create an
add_arguments(cls, parser)
class method on the test runner and call
parser.add_argument
to add any custom arguments, as parser is now an
argparse.ArgumentParser
instance.
Nama bidang yang tidak lebih panjang dari panjang nama kolom didukung oleh sebuah basisdata dapat membuat masalah. Sebagai contoh, dengan MySQL anda akan mendapatkan sebuah pengecualian mencoba membuat kolom, dan dengan PostgreSQL nama kolom dipotong oleh basisdata (anda mungkin melihat sebuah peringatan di catatan PostgreSQL).
Sebuah pemeriksaan model telah diperkenalkan untuk memperingati lebih baik pengguna pada skenario ini sebelum pembuatan sebenarnya dari tabel-tabel basisdata.
Jika anda mempunyai sebuah model yang ada dimana pemeriksaan ini kelihatan positif salah, sebagai contoh di PostgreSQL dimana nama sudah sedang dipotong, cukup menggunakan db_column
untuk menentukan nama yang sedang digunakan.
Pemeriksaan juga berlaku pada kolom dibangkitkan dalam sebuah model ManyToManyField.through
yang tersirat. Jika anda berjalan kedalam sebuah masalah disana, gunakan through
untuk membuat sebuah model yang jelas dan kemudian tentukan db_column
di kolomnya sesuai kebutuhan.
Querying for model lookups now checks if the object passed is of correct type
and raises a ValueError
if not. Previously, Django didn't care if the
object was of correct type; it just used the object's related field attribute
(e.g. id
) for the lookup. Now, an error is raised to prevent incorrect
lookups:
>>> book = Book.objects.create(name="Django")
>>> book = Book.objects.filter(author=book)
Traceback (most recent call last):
...
ValueError: Cannot query "<Book: Django>": Must be "Author" instance.
EmailField.max_length
awal ditingkatkan menjadi 254¶Karakter 75 awalan lama max_length
tidak dapat menyimpan semua kemungkinan alamat surel RFC3696/5321-compliant. Untuk menyimpan semua kemungkinan alamat surel sah, max_length
telah ditingkatkan menjadi 254 karakter. Anda akan butuh membangkitkan dan memberlakukan perpindahan basisdata untuk model yang anda terpengaruh (atau tambah max_length=75
jika anda berharap menjaga panjang di bidang-bidang anda saat ini). Sebuah perpindahan untuk django.contrib.auth.models.User.email
disertakan.
Akhir dari masa dukungan hulu telah sampai di Juli 2014 untuk PostgreSQL 8.4. Sebagai konsekuensinya, Django 1.8 menyetel 9.0 sebagai versi PostgreSQL minimal dia secara resmi dukung.
Ini juga menyertakan penjatuhan dukungan untuk PostGIS 1.3 and 1.4 ketika versi ini tidak didukung pada versi PostgreSQL terakhir daripada 8.4.
Django juga sekarang membutuhkan menggunakan Psycopg2 versi 2.4.5 atau lebih tinggi (atau 2.5+ jika anda ingin menggunakan django.contrib.postgres
).
Akhir dari masa dukungan hulu telah sampai di Januari 2012 untuk MySQL 5.0 dan Desember 2013 untuk MySQL 5.1. Sebagai konsekuensinya, Django 1.8 menyetel 5.5 sebagai versi MySQL minimal dia secara resmi dukung.
Akhir dari masa dukungan hulu telah sampai di Juli 2010 untuk Oracle 9.2, Januari 2012 untuk Oracle 10.1, dan Juli 2013 untuk Oracle 10.2. Sebagai konsekuensinya, Django 1.8 menyetel 11.1 sebagai versi Oracle minimal dia secara resmi dukung.
Versi awal dari Django memberikan peran CONNECT dan RESOURCE pada pengguna percobaan di Oracle. Peran-peran ini telah diusangkan, jadi Django 1.8 menggunakan hak pokok khusus. Perubahan dari hak memwajibkan pengguna utama untuk menjalankan percobaan (meskipun proyek dikonfigurasikan untuk menghindari membuat sebuah pengguna percobaan). Hak tepat mewajibkan sekarang dirinci dalam Oracle notes.
AbstractUser.last_login
selalu bernilai null¶Bidang AbstractUser.last_login
sekarang mengizinkan nilai null. Sebelumnya, itu diawalkan pada waktu ketika pengguna membuat yang menyesatkan jika pengguna tidak pernah masuk. Jika anda sedang menggunakan pengguna awalan (django.contrib.auth.models.User
), jalankan perpindahan basisdata disertakan di contrib.auth
.
Jika anda sedang menggunakan penyesuaian model pengguna yang mewarisi dari AbstractUser
, anda akan butuh menjalankan makemigrations
dan membangkitkan sebuah perpindahan untuk aplikasi anda yang mengandung model itu. Juga, jika berharap menyetel last_login
menjadi NULL
untuk pengguna yang belum masuk, anda dapat menjalankan permintaan ini:
from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractBaseUser
UserModel = get_user_model()
if issubclass(UserModel, AbstractBaseUser):
UserModel._default_manager.filter(last_login=models.F("date_joined")).update(
last_login=None
)
django.contrib.gis
¶django.db.models.Lookup
.str
representation of GEOSGeometry
awalan telah berubah dari bentuk WKT menjadi EWKT (termasuk SRID). Ketika perwakilan ini digunakan dalam kerangka kerja serialisasi, itu berarti bahwa keluaran dumpdata
akan sekarang mengandung nilai SRID dari obyek geometri.TemplateResponse
membawa sebaris dengan render
¶Pembangun TemplateResponse
dirancang menjadi pengganti singgah untuk fungsi render()
. Bagaimanapun, itu mempunyai sedikit ketidaksesuaian, bahwa untuk TemplateResponse
, data konteks dari melewatkan di kamus konteks dapat dibayangi oleh data konteks dikembalikan dari pengolah konteks, sedangkan untuk render
itu adalah cara lain. Ini adalah sebuah kesalahan, dan perilaku dari render
lebih sesuai, sejak itu mengizinkan secara global menentukan pengolah konteks untuk menjadi dikesampingkan secara lokal di tampilan. Jika anda mengandalkan pada kenyataan data konteks di TemplateResponse
dapat dikesampingkan menggunakan pengolah konteks, anda akan butuh merubah kode anda.
setUpClass
/ tearDownClass
di kasus-kasus percobaan¶Penghias override_settings()
dan modify_settings()
sekarang bertindak pada tingkat kelas ketika digunakan sebagai penghias kelas. Sebagai konsekuensi, ketika menimpa setUpClass()
atau tearDownClass()
, penerapan super
harus selalu dipanggil.
django.contrib.formtools
¶Aplikasi bantuan formtool telah dipindahkan untuk memisahkan paket dan halaman dokumentasi yang bersangkut-paut telah diperbaharui atau dipindahkan.
Paket baru tersedia di GitHub dan di PyPI.
Django sebelumnya menutup hubungan basisdata diantara setiap percobaan dalam sebuah TestCase
. Ini tidak lagi kasus sebagai Django sekarang membungkus keseluruhan TestCase
dalam sebuah transaksi. Jika beberapa percobaan anda bergantung pada perilaku lama, anda harus memiliki mereka mewarisi dari TransactionTestCase
sebagai gantinya.
django.template
¶Jika anda telah mengandalkan pada API pribadi diungkap dalam modul django.template
, anda mungkin harus mengimpor mereka dari django.template.base
sebagai gantinya.
Juga pribadi API django.template.base.compile_string()
, django.template.loader.find_template()
, dan django.template.loader.get_template_from_string()
dipindahkan.
model
pada hubungan model pribadi¶Di versi paling awal dari Django, pada model dengan hubungan lintas foreign key (sebagai contoh), model._meta.get_all_related_objects()
mengembalikan hubungan sebagai sebuah django.db.models.related.RelatedObject
dengan atribut model
disetel ke sumber dari hubungan. Sekarang, metode ini mengembalikan hubungan sebagai django.db.models.fields.related.ManyToOneRel
(API pribadi RelatedObject
telah dipindahkan), dan atribut model
distel ke sasaran dari hubungan daripada sumber. Sumber model adalah dapat diakses pada atribut related_model
sebagai gantinya.
Consider this example from the tutorial in Django 1.8:
>>> p = Poll.objects.get(pk=1)
>>> p._meta.get_all_related_objects()
[<ManyToOneRel: polls.choice>]
>>> p._meta.get_all_related_objects()[0].model
<class 'polls.models.Poll'>
>>> p._meta.get_all_related_objects()[0].related_model
<class 'polls.models.Choice'>
and compare it to the behavior on older versions:
>>> p._meta.get_all_related_objects()
[<RelatedObject: polls:choice related to poll>]
>>> p._meta.get_all_related_objects()[0].model
<class 'polls.models.Choice'>
Untuk mengakses model sumber, anda dapat menggunakan pola seperti ini untuk menulis kode yang akan bekerja dengan kedua Django 1.8 dan versi terlama:
for relation in opts.get_all_related_objects():
to_model = getattr(relation, "related_model", relation.model)
Also note that get_all_related_objects()
is deprecated in 1.8.
Perubahan berikut pada API backend basisdata didokumentasikan untuk memandu penulisan backend pihak-ketiga tersebut dalam memperbaharui kode mereka.
Kelas-kelas BaseDatabaseXXX
telah dipindahkan ke django.db.backends.base
. Harap mengimpor mereka dari tempat baru:
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.base.client import BaseDatabaseClient
from django.db.backends.base.creation import BaseDatabaseCreation
from django.db.backends.base.features import BaseDatabaseFeatures
from django.db.backends.base.introspection import BaseDatabaseIntrospection
from django.db.backends.base.introspection import FieldInfo, TableInfo
from django.db.backends.base.operations import BaseDatabaseOperations
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.backends.base.validation import BaseDatabaseValidation
Atribut data_types
, data_types_suffix
, dan data_type_check_constraints
telah dipindahkan dari kelas DatabaseCreation
ke DatabaseWrapper
.
Metode SQLCompiler.as_sql()
sekarang mengambil sebuah parameter subquery
(#24164).
Metode BaseDatabaseOperations.date_interval_sql()
sekarang hanya mengambil parameter timedelta
.
django.contrib.admin
¶AdminSite
tidak lagi mengambil sebuah argumen app_name
dan atribut app_name
nya telah dipindahkan. Nama Aplikasi selalu admin
(sebagai lawan pada nama instance yang anda dapat masih sesuaikan menggunakan AdminSite(name="...")
.ModelAdmin.get_object()
(API pribadi) sekarang mengambil argumen ketiga bernama from_field
untuk menentukan bidang mana harus cocok dengan object_id
yang disediakan.ModelAdmin.response_delete()
sekarang mengambil argumen kedua bernama obj_id
yang merupakan penciri serialisasi digunakan untuk mengambil obyek sebelum penghapusan.django.template.defaultfilters
¶Untuk membuat penyaring siap-pakai yang mengeluarkan HTML "safe by default" ketika memanggil mereka di kode Python, fungsi berikut di django.template.defaultfilters
telah berubah menjadi pelolosan otomatis nilai masukan mereka:
join
linebreaksbr
linebreaks_filter
linenumbers
unordered_list
urlize
urlizetrunc
Anda dapat kembali ke perilaku lama dengan menentukan autoescape=False
jika anda sedang melewatkan isi yang dipercaya. Perubahan ini tidak mempunyai pengaruh apapun ketika menggunakan penyaring sesuai di cetakan.
connections.queries
adalah sekarang sebuah atribut hanya-baca.
Hubungan basisdata dipertimbangkan sama hanya jika mereka obyek yang sama. Mereka tidak dapat diacak lagi.
GZipMiddleware
digunakan untuk meniadakan pemampatan untuk beberapa jenis isi ketika permintaan dari Internet Explorer, agar memecahkan sebuah kesalahan di IE6 dan paling awal. Perilaku ini dapat mempengaruhi penampilan pada IE7 dan terakhir. Itu telah dipindahkan.
URLField.to_python` tidak lagi menambah sebuah buntutuan garis miring pada URL tidak berjalur.
Penyaring cetakan length
sekarang mengembalikan 0
untuk sebuah variabel tidak ditentukan, daripada sebuah string kosong.
ForeignKey.default_error_message['invalid']
telah berubah dari '%(model)s instance with pk %(pk)r does not exist.'
menjadi '%(model)s instance with %(field)s %(value)r does not exist.'
Jika anda menggunakan pesan ini di kode anda sendiri, harap memperbaharui daftar dari parameter yang disisipkan. Secara internal, Django akan melanjutkan menyediakan parameter pk
di params
untuk kesesuaian kebelakang.
UserCreationForm.error_messages['duplicate_username']
is no longer used.
If you wish to customize that error message, override it on the form using the 'unique'
key in
Meta.error_messages['username']
or, if you have a custom form field for
'username'
, using the 'unique'
key in its
error_messages
argument.
Blok usertools
di cetakan base.html
dari django.contrib.admin
sekarang membutuhkan variabel konteks has_permission
untuk disetel. Jika anda mempunyai tampilan admin penyesuaian apapun yang menggunakan cetakan ini, perbaharui mereka untuk melewatkan AdminSite.has_permission()
ketika nilai variabel ini atau cukup menyertakan AdminSite.each_context(request)
di konteks.
Perubahan internal dibuat pada widget ClearableFileInput
untuk mengizinkan penyesuaian lebih. Atribut url_markup_template
tidak terdokumentasi telah dipindahkan dalam mendukung template_with_initial
.
Untuk ketetapan dengan penjaja utama lain, lokal en_GB
sekarang mempunyai Sennin sebagai hari pertama dari minggu.
Kedua telah dipindahkan dari lokal apapun yang memiliki mereka di TIME_FORMAT
, DATETIME_FORMAT
, atau SHORT_DATETIME_FORMAT
.
Ukuran maksimal awalan dari tablespace percobaan Oracle telah ditingkatkan dari 300 M (atau 200M, sebelum 1.7.2) menjadi 500M.
reverse()
and reverse_lazy()
now return Unicode strings instead of
bytestrings.
Shim CacheClass
telah dipindahkan dari semua backend cache. Nama lain ini disediakan untuk kesesuaian kebelakang dengan Django 1.3. Jika anda masih menggunakan mereka, harap perbaharui proyek anda untuk menggunakan nama kelas sebenarnya ditemukan di kunci BACKEND
dari pengaturan CACHES
.
Secara awalan, call_command()
sekarang selalu melewati pemeriksaan kerangka kerja (meskipun anda melewatkan itu skip_checks=False
).
When iterating over lines, File
now uses
universal newlines. The following are recognized as ending a
line: the Unix end-of-line convention '\n'
, the Windows convention
'\r\n'
, and the old Macintosh convention '\r'
.
Backend cache memcache MemcachedCache
dan PyLibMCCache
akan menghapus sebuah kunci jika set()
gagal. Ini diperlukan untuk memastikan penyimpanan sesi cache_db
selalu mengambil data sesi paling saat ini.
API pribadi override_template_loaders
dan override_with_test_loader
di django.test.utils
telah dipindahkan. Menimpa TEMPLATES
dengan override_settings
sebagai gantinya.
Peringatan dari backend basisdata MySQL tidak lagi dirubah ke pengecualian ketika DEBUG
adalah True
.
HttpRequest
sekarang telah disederhanakan repr
(sebagai contoh <WSGIRequest: GET '/somepath/'>
). Ini tidak akan merubah perilaku dari kelas SafeExceptionReporterFilter
.
Tampilan berdasarkan-kelas yang menggunakan ModelFormMixin
akan memunculkan sebuah pengecualian ImproperlyConfigured
ketika kedua atribut fields
dan form_class
ditentukan. Sebelumnya, fields
secara diam diabaikan.
Ketika mengikuti pengalihan, klien percobaan sekarang memunculkan RedirectCycleError
jika itu mengetahui perulangan atau menegai batasan pengalihan maksimal (daripada kemudian melewatkan secara diam).
Deretan karakter dapat diartikan sebagai parameter default
dari bidang adalah dimasukkan ke deretan karakter berwujud terakhir, jadi jenis kembalian dari Field.get_default()
berbeda di beberapa kasus. Tidak ada perubahan pada nilai awalan yang merupakan hasil dari callable.
GenericIPAddressField.empty_strings_allowed
sekarang False
. Backend basisdata yang mengartikan string kosong sebagai null (hanya Oracle diantara backend yang Django sertakan) akan tidak lagi merubah nilai null kembali ke string kosong. Ini adalah ketetapan dengan backend lain.
When the BaseCommand.leave_locale_alone
attribute is False
, translations are now deactivated instead of forcing
the "en-us" locale. In the case your models contained non-English strings and
you counted on English translations to be activated in management commands,
this will not happen any longer. It might be that new database migrations are
generated (once) after migrating to 1.8.
django.utils.translation.get_language()
sekarang mengembalikan None
daripada LANGUAGE_CODE
ketika terjemahan secara sementara dinonaktifkan.
Ketika sebuah terjemahan tidak ada untuk harfiah tertentu, fallback sekarang diambil dari bahasa LANGUAGE_CODE
(daripada dari pesan msid
tidak diterjemahkan).
Bidang name
dari django.contrib.contenttypes.models.ContentType
telah dipindahkan dengan perpindahan dan diganti oleh sebuah sifat. Itu berarti itu tidak memungkinkan untuk meminta atau menyaring sebuah ContentType
dengan bidang ini lagi.
Hati-hati jika anda meningkatkan ke Django 1.8 dan melewati Django 1.7. Jika anda menjalankan manage.py migrate --fake
, perpindahan ini akan dilewatkan dan anda akan melihat sebuah pengecualian RuntimeError: Error creating new content types.
karena kolom name
tidak akan dibuang dari basisdata. Gunakan manage.py migrate --fake-initial
untuk meniru hanya perpindahan awalan sebagai gantinya.
Pilihan migrate --fake-initial
baru mengizinkan perpindahan inisial tiruan, Di 1.7, inisial perpindahan selalu secara otomatis tiruan jika semua tabel dibuat di inisial perpindahan sudah ada.
Sebuah aplikasi tanpa perpindahan dengan ForeignKey
pada sebuah aplikasi dengan perpindahan mungkin sekarang hasil di kesalahanbatasan foreign key ketika memindahkan basisdata atau menjalankan percobaan. Di Django 1.7, ini dapat gagal secara diam dan kembali di batasan hilang. Untuk mengatasi kesalahan, tambah perpindahan pada aplikasi tanpa mereka.
django.db.models.options.Options
¶Sebagai bagian dari perumusan dari API Model._meta
(dari kelas django.db.models.options.Options
), sejumlah metode telah diusangkan dan akan dipindahkan di Django 1.10:
get_all_field_names()
get_all_related_objects()
get_all_related_objects_with_model()
get_all_related_many_to_many_objects()
get_all_related_m2m_objects_with_model()
get_concrete_fields_with_model()
get_field_by_name()
get_fields_with_model()
get_m2m_with_model()
cycle
dan firstof
dari pustaka future
¶Django 1.6 memperkenalkan sintaksis {% load cycle from future %}
dan {% load firstof from future %}
untuk kesesuaian kedepan dari etiket cetakan cycle
dan firstof
. Sintaksis ini sekarang diusangkan dan akan dipindahkan di Django 1.10. Anda dapat cukup memindahkan etiket {% load ... from future %}
.
django.conf.urls.patterns()
¶Di haru dahulu dari Django, itu didorong untuk mengacukan tampilan sebagai string di urlpatterns
:
urlpatterns = patterns(
"",
url("^$", "myapp.views.myview"),
)
dan Django secara ajaib akan mengimpor myapp.views.myview
secara internal dan merubah string kedalam acuan fungsi sebenarnya. Untuk mengurangi perulangan ketika mengacu banyak tampilan dari modul yang sama, fungsi patterns()
mengambil argumen prefix
awal yang diwajibkan yang ditambahkan ke semua tampilan-sebagai-string di kumpulan dari urlpatterns
itu:
urlpatterns = patterns(
"myapp.views",
url("^$", "myview"),
url("^other/$", "otherview"),
)
Di era modern, kami telah memperbaharui tutorial daripada menganjurkan modul tampilan anda dan mengacu fungsi tampilan anda (atau kelas-kelas) secara langsung. Ini mempunyai sejumlah keuntungan, semua berasal dari kenyataan bahwa kami sedang menggunakan Python biasa dalam menempatkan "Django String Magic": kesalahan-kesalahan ketika anda salah ketik sebuah nama tampilan adalah sedikit mengaburkan, IDE dapat membantu dengan pelengkapan otomatis dari nama-nama tampilan, dll.
Jadi hari ini, yang diatas menggunakan argumen prefix
jauh lebih mungkin untuk ditulis (dan lebih baik ditulis) sebagai:
from myapp import views
urlpatterns = patterns(
"",
url("^$", views.myview),
url("^other/$", views.otherview),
)
Thus patterns()
serves little purpose and is a burden when teaching new users
(answering the newbie's question "why do I need this empty string as the first
argument to patterns()
?"). For these reasons, we are deprecating it.
Updating your code is as simple as ensuring that urlpatterns
is a list of
django.conf.urls.url()
instances. For example:
from django.conf.urls import url
from myapp import views
urlpatterns = [
url("^$", views.myview),
url("^other/$", views.otherview),
]
view
to django.conf.urls.url()
¶Terkait pada barang sebelumnya, mengacu tampilan sebagai sting di fungsi url()
adalah diusangkan. Lewatkan tampilan dapat dipanggil seperti digambarkan di bagian sebelumnya sebagai gantinya.
django.core.context_processors
¶Pengolah konteks cetakan siap-pakai telah dipindahkan ke django.template.context_processors
.
django.test.SimpleTestCase.urls
¶Atribut SimpleTestCase.urls
untuk menentukan konfigurasi URLConf dalam percobaan telah diusangkan dan akan dipindahkan di Django 1.10. Gunakan @override_settings(ROOT_URLCONF=...)
sebagai gantinya.
prefix
pada i18n_patterns()
¶Related to the previous item, the prefix
argument to
django.conf.urls.i18n.i18n_patterns()
has been deprecated. Simply pass a
list of django.conf.urls.url()
instances instead.
for
¶Menggunakan sebuah hitungan tidak benar dari nilai dibongkar dalam etiket for
akan memunculkan sebuah pengecualian daripada gagal secara diam di Django 1.10.
reverse()
dan url
¶Membalikkan URL dengan jalur Python adalah sebuah tindakan yang mahal karena itu menyebabkan jalur menjadi berbalik untuk diimpor. Perilaku ini juga dihasilkan di security issue. Gunakan named URL patterns untuk membalikkan sebagai gantinya.
Jika anda sedang menggunakan django.contrib.sitemaps
, tambah argumen name
ke url
yang mengacu django.contrib.sitemaps.views.sitemap()
:
from django.contrib.sitemaps.views import sitemap
url(
r"^sitemap\.xml$",
sitemap,
{"sitemaps": sitemaps},
name="django.contrib.sitemaps.views.sitemap",
)
untuk memastikan kesesuaian ketika membalikkan oleh jalur Python dipindahkan di Django 1.10.
Serupa untuk peta situs GIS, tambah name='django.contrib.gis.sitemaps.views.kml'
atau name='django.contrib.gis.sitemaps.views.kmz'
.
Jika anda sedang menggunakan jalur Python untuk pengaturan LOGIN_URL
atau LOGIN_REDIRECT_URL
, gunakan nama dari url()
sebagai gantinya.
Modul django.db.models.sql.aggregates
dan django.contrib.gis.db.models.sql.aggregates
(kedua API pribadi), telah diusangkan sebagai django.db.models.aggregates
dan django.contrib.gis.db.models.aggregates
sekarang juga bertanggungjawab untuk pembangkitan SQL. Modul lama akan dipindahkan di Django 1.10.
Jika anda sedang menggunakan modul lama, lihat Query Expressions untuk petunjuk pada penulisan kembali pengumpulan penyesuaian menggunakan API stabil baru.
Metode berikut dan sifat dari django.db.models.sql.query.Query
juga telah diusangkan dan shim kesesuaian kebelakang akan dipindahkan di Django 1.10:
Query.aggregates
, diganti oleh annotations
.annotation_select
.Query.add_aggregate()
, diganti oleh add_annotation()
.Query.set_aggregate_mask()
, diganti oleh set_annotation_mask()
.Query.append_aggregate_mask()
, diganti oleh append_annotation_mask()
.Command.option_list
¶Perintah pengelolaan sekarang menggunakan argparse
sebagai gantinya optparse
untuk mengurai argumen baris-perintah dilewatkan ke perintah. Ini juga berarti bahwa cara untuk menambah argumen penyesuaian pada perintah telah berubah: daripada memperpanjang daftar kelas option_list
, anda sekarang harus menimpa metode add_arguments()
dan menambah argumen melalui argparse.add_argument()
. Lihat this example untuk lebih rinci.
django.core.management.NoArgsCommand
¶Kelas NoArgsCommand
sekarang diusangkan dan akan dipindahkan di Django 1.10. Gunakan BaseCommand
sebagai gantinya, yang mengambil tidak ada argumen secara awal.
Pilihan --list
dari perintah pengelolaan migrate
telah diusangkan dan akan dipindahkan di Django 1.10. Gunakan showmigrations
sebagai gantinya.
cache_choices
dari ModelChoiceField
dan ModelMultipleChoiceField
¶ModelChoiceField
dan ModelMultipleChoiceField
mengambil sebuah tidak terdokumentasi, cache_choices
pilihan tidak dicoba. Ini menyimpan queryset diantara pembangunan banyak dari obyek Form
yang sama. Pilihan ini adalah subjek pada pengusangan yang dipercepat dan akan dipindahkan di Django 1.9.
django.template.resolve_variable()
¶Fungsi ini telah secara tidak resmi ditandai sebagai "Deprecated" untuk beberapa waktu. Ganti resolve_variable(path, context)
dengan django.template.Variable(path).resolve(context)
.
django.contrib.webdesign
¶Itu menyediakan etiket cetakan lorem
yang sekarang disertakan di etiket siap-pakai. Cukup pindahkan 'django.contrib.webdesign'
dari INSTALLED_APPS
dan {% load webdesign %}
dari cetakan anda.
error_message
argumen ke django.forms.RegexField
¶Itu menyediakan kesesuaian kebelakang untuk kode pra-1.0, tetapi fungsionalitasnya berulang. Gunakan Field.error_messages['invalid']
sebagai gantinya.
unordered_list
lama¶Sebuah terlama (pra-1.0), lebih bentuk masukan terbatas dan bertele-tele untuk saringan cetakan unordered_list
telah diusangkan:
["States", [["Kansas", [["Lawrence", []], ["Topeka", []]]], ["Illinois", []]]]
Menggunakan sintaksis baru, ini menjadi:
["States", ["Kansas", ["Lawrence", "Topeka"], "Illinois"]]
django.forms.Field._has_changed()
¶Namai kembali metode ini ke has_changed()
dengan memindahkan garis bawah di depan. Nama lama akan masih bekerja sampai Django 1.10.
django.utils.html.remove_tags()
dan removetags
¶django.utils.html.remove_tags()
sama halnya dengan saringan cetakan removetags
telah diusangkan karena mereka tidak dapat menjamin keluaran aman.
Fungsi django.utils.html.strip_entities()
tidak digunakan dan tidak terdokumentasikan juga telah diusangkan.
is_admin_site
argumen ke django.contrib.auth.views.password_reset()
¶Itu adalah pilihan warisan yang harus tidak lagi dibutuhkan.
SubfieldBase
¶django.db.models.fields.subclassing.SubfieldBase
telah diusangkan dan akan dipindahkan di Django 1.10. Secara riwayat, itu telah digunakan untuk menangani bidang-bidang dimana perubahan jenis dibutuhkan ketika memuat dari basisdata, tetapi itu tidak digunakan di pemanggilan .values()
atau di pengumpulan. Itu telah diganti dengan from_db_value()
.
Pendekatan baru tidak memanggil metode to_python()
pada penugasan seperti dulu kasus dengan SubfieldBase
. Jika anda butuh perilaku itu, terapkan kembali kelas Creator
from Django's source code di proyek anda.
django.utils.checksums
¶The django.utils.checksums
module has been deprecated and will be removed
in Django 1.10. The functionality it provided (validating checksum using the
Luhn algorithm) was undocumented and not used in Django. The module has been
moved to the django-localflavor package (version 1.1+).
InlineAdminForm.original_content_type_id
¶Atribut original_content_type_id
pada InlineAdminForm
telah diusangkan dan akan dipindahkan di Django 1.10. Secara riwayat, dia digunakan untuk membangun URL InlineAdminForm
. URL ini sekarang dapat diakses menggunakan atribut absolute_url
pada formulir.
form_class
django.views.generic.edit.FormMixin.get_form()
¶Subkelas FormMixin
yang menimpa metode get_form()
harus memastikan menyediakan nilai awal untuk argumen form_class
sejak itu sekarang menjadi pilihan.
get_template()
dengan Context
¶Jenis kembalian dari get_template()
telah berubah di Django 1.8: sebagai gantinya django.template.Template
, itu mengembalikan instance Template
yang jenis tepatnya bergantung pada backend mana itu dimuat.
Kedua kelas menyediakan metode render()
, bagaimanapun, yang awal mengambil django.template.Context
sebagai sebuah argumen selagi yang terakhir mengharapkan dict
. Perubahan ini dipaksakan melalui jalur pengusangan untuk cetakan Django.
Semua ini juga berlaku ke select_template()
.
Template
dan Context
di cetakan tanggapan¶Beberapa metode dari SimpleTemplateResponse
dan TemplateResponse
diterima obyek django.template.Context
dan django.template.Template
sebagai argumen. Mereka seharusnya menerima dict
dan tergantung-backend obyek cetakan masing-masing.
Ini juga berlaku pada jenis kembalian jika anda mempunyai subkelas antara cetakan kelas tanggapan.
Periksa template response API documentation untuk rincian.
dictionary
dan context_instance
dari fungsi membangun¶Fungsi berikut tidak lagi menerima parameter dictionary
dan context_instance
di Django 1.10:
django.shortcuts.render()
django.shortcuts.render_to_response()
django.template.loader.render_to_string()
Gunakan parameter context
sebagai gantinya. Ketika dictionary
dilewatkan sebagai argumen penempatan, yaitu dialek paling umum, tidak ada perubahan dibutuhkan.
Jika anda sedang melewatkan Context
di context_instance
, lewatkan dict
di parameter context
sebagai gantinya. Jika anda sedang melewatkan RequestContext
, lewatkan permintaan secara terpisah di parameter request
.
dirs
dari fungsi cetakan-pencarian¶Fungsi berikut tidak lagi menerima parameter dirs
untuk menimpa TEMPLATE_DIRS
di Django 1.10:
django.template.loader.get_template()
django.template.loader.select_template()
django.shortcuts.render()
django.shortcuts.render_to_response()
Parameter tidak bekerja secara tetap terhadap pemuat cetakan berbeda dan tidak bekerja untuk cetakan disertakan.
django.template.loader.BaseLoader
¶django.template.loader.BaseLoader
dinamai kembali menjadi django.template.loader.BaseLoader
. Jika anda sedang menulis pemuat cetakan penyesuaian yang mewarisi BaseLoader
, anda harus mewarisi Loader
sebagai gantinya.
django.test.utils.TestTemplateLoader
¶API pribadi django.test.utils.TestTemplateLoader
diusangkan mendukung django.template.loaders.locmem.Loader
dan akan dipindahkan di Django 1.9.
max_length
pada kelas-kelas Storage
peyesuaian¶Subkelas Storage
harus menambahkan max_length=None
sebagai sebuah parameter pada get_available_name()
dan/atau save()
jika mereka menimpa baik metode. Dukungan untuk penyimpaan yang tidak menerima argumen ini akan dipindahkan di Django 1.10.
qn
diganti oleh compiler
¶Di versi Django sebelumnya, beragam internal cara ORM (kebanyakan cara as_sql
) menerima sebuah argumen qn
(untuk "mengutip nama"), yang telah diacukan ke fungsi yang mengutip penciri untuk mengirimkan ke basisdata. Di Django 1.8, argumen tersebut telah dinamai kembali ke compiler
dan sekarang instance SQLCompiler
penuh. Untuk kesesuaian kebelakang, memanggil instance SQLCompiler
melakukan pengutipan-nama sama yang fungsi qn
biasanya. Bagaimanapun, shim kesesuaian kebelakang ini segera diusangkan: anda harus menamai kembali argumen qn
anda ke compiler
, dan panggil compiler.quote_name_unless_alias(...)
dimana anda sebelumnya memanggil qn(...)
.
RedirectView.permanent
¶Nilai awal dari atribut RedirectView.permanent
akan berubah dari True
menjadi False
di Django 1.9.
AuthenticationMiddleware
tanpa SessionAuthenticationMiddleware
¶django.contrib.auth.middleware.SessionAuthenticationMiddleware
telah ditambahkan di Django 1.7. Di 1.7.2, fungsionalitasnya telah dipindahkan ke auth.get_user()
dan, untuk kesesuaian kebelakang, ada hanya jika 'django.contrib.auth.middleware.SessionAuthenticationMiddleware'
muncul di MIDDLEWARE_CLASSES
..
Di Django 1.10, pengecekan sesi akan diadakan meskipun apakah atau tidak SessionAuthenticationMiddleware
diadakan (di mana titik SessionAuthenticationMiddleware
akan tidak mempunyai makna). Anda dapat menambahkannya ke MIDDLEWARE_CLASSES
anda terkadang sebelum kemudian dimasukkan. Silahkan baca upgrade considerations dahulu.
django.contrib.sitemaps.FlatPageSitemap
¶django.contrib.sitemaps.FlatPageSitemap
telah dipindahkan ke django.contrib.flatpages.sitemaps.FlatPageSitemap
. Tempat impor lama diusangkan dan akan dipindahkan di Django 1.9.
ssi
¶Etiket cetakan ssi
mengizinkan berkas untuk disertakan dalam sebuah cetakan oleh jalur mutlak. Ini adalah dari keterbatasan penggunaan paling di keadaan penyebaran, dan etiket include
sering lebih masuk akal. Etiket ini sekarang diusangkan dan akan dipindahkan di Django 1.10.
=
sebagai perbandingan penghubung di etiket cetakan if
¶Menggunakan tanda persamaan tunggal dengan etiket cetakan {% if %}
untuk persamaan percobaan tidak didokumentasikan dan tidak dicoba. Itu sekarang diusangkan mendukung ==
.
%(<foo>)s
sintaksis di ModelFormMixin.success_url
¶Warisan sintaksis %(<foo>)s
di ModelFormMixin.success_url
diusangkan dan akan dipindahkan di Django 1.10.
GeoQuerySet
¶Metode pengumpulan collect()
, extent()
, extent3d()
, make_line()
, dan unionagg()
diusangkan dan harus diganti dengan berdasarkan-fungsi mereka pengumpulan yang sama (Collect
, Extent
, Extent3D
, MakeLine
, dan Union
).
allow_migrate
¶Tanda tangan dari metode allow_migrate()
dari perute basisdata telah berubah dari allow_migrate(db, model)
menjadi allow_migrate(db, app_label, model_name=None, **hints)
.
Ketika model_name
disetel, nilai yang telah sebelumnya diberikan melalui penempatan argumen model
mungkin tidak ditemukan didalam kamus hints
dibawah kunci 'model'
.
Setelah berganti ke tanda tangan baru perute akan juga dipanggil oleh tindakan RunPython
dan RunSQL
.
Fitur-fitur ini telah mencapai akhir siklus pengusangan mereka dan dipindahkan di Django 1.8. Lihat Fitur diusangkan di 1.6 untuk rincian, termasuk bagaimana memindahkan penggunaan fitur ini.
django.contrib.comments
dipindahkan.TransactionMiddleware
autocommit
, commit_on_success
, dan commit_manually
, ditentukan di django.db.transaction
commit_unless_managed
dan rollback_unless_managed
, juga ditentukan di django.db.transaction
TRANSACTIONS_MANAGED
cycle
dan firstof
meloloskan otomatis argumen mereka.SEND_BROKEN_LINK_EMAILS
dipindahkan.django.middleware.doc.XViewMiddleware
dipindahkan.Model._meta.module_name
dipindahkan.get_query_set
dan metode queryset yang mirip dipindahkan. Ini mempengaruhi kelas-kelas berikut: BaseModelAdmin
, ChangeList
, BaseCommentNode
, GenericForeignKey
, Manager
, SingleRelatedObjectDescriptor
dan ReverseSingleRelatedObjectDescriptor
.ChangeList.root_query_set
dan ChangeList.query_set
dipindahkan.django.views.defaults.shortcut
dan django.conf.urls.shortcut
dipindahkan.django.db.backend
django.db.close_connection()
django.db.backends.creation.BaseDatabaseCreation.set_autocommit()
django.db.transaction.is_managed()
django.db.transaction.managed()
django.forms.widgets.RadioInput
telah dipindah.django.test.simple
dan kelas django.test.simple.DjangoTestSuiteRunner
dipindahkan.django.test._doctest
is removed.CACHE_MIDDLEWARE_ANONYMOUS_ONLY
dipindahkan. Perubahan ini mempengaruhi kedua django.middleware.cache.CacheMiddleware
dan django.middleware.cache.UpdateCacheMiddleware
meskipun kekurangan dari peringatan pengusangan di kelas terakhir.help_text
disediakan-pengguna dalam bentuk untuk bidang model ManyToMany
tidak dilakukan oleh Django lagi baik pada lapisan model atau formulir.Model._meta.get_(add|change|delete)_permission
dipindahkan.django_language
tidak lagi membaca untuk kesesuaian kebelakang.django.contrib.gis.sitemaps.views.index
dan django.contrib.gis.sitemaps.views.sitemap
).django.utils.html.fix_ampersands
, saringan cetakan fix_ampersands
, dan django.utils.html.clean_html
dipindahkan.Des 04, 2023