Saat menulis pertanyaan Django, seseorang dapat menggunakan kedua id / pk sebagai parameter kueri.
Object.objects.get(id=1)
Object.objects.get(pk=1)
Saya tahu bahwa pk adalah singkatan dari Primary Key dan hanya jalan pintas, menurut dokumentasi Django. Namun tidak jelas kapan seseorang harus menggunakan id atau pk.
django
orm
primary-key
Seni
sumber
sumber
id
dan untukpk
Jawaban:
Itu tidak masalah.
pk
lebih independen dari bidang kunci utama yang sebenarnya yaitu Anda tidak perlu peduli apakah bidang kunci utama disebutid
atauobject_id
atau apa pun.Ini juga memberikan lebih banyak konsistensi jika Anda memiliki model dengan bidang kunci utama yang berbeda.
sumber
id
juga merupakan fungsi bawaan di Python, saya lebih suka menggunakan pk karena itu.pk
lebih disukai. Lihat dokumentasi fungsiid
bawaan di pustaka standar Python. (Ini sama dengan Python 2. )Dalam proyek Django di mana saya tahu bahwa
pk
selalu kembaliid
saya lebih suka menggunakanid
ketika tidak berbenturan denganid()
fungsi (di mana-mana kecuali nama variabel). Alasan untuk ini adalah itupk
adalah properti yang 7 kali lebih lambat daripadaid
karena butuh waktu mencaripk
nama atribut dimeta
.Berikut adalah kode Django yang relevan:
Ini benar-benar kasus yang jarang terjadi ketika saya perlu menggunakan variabel bernama
pk
. Saya lebih suka menggunakan sesuatu yang lebih verbose, sepertiuser_id
daripadapk
.Mengikuti konvensi yang sama lebih disukai di seluruh proyek. Dalam kasus Anda
id
adalah nama parameter, bukan properti, jadi hampir tidak ada perbedaan dalam timing. Nama parameter tidak berbenturan dengan namaid()
fungsi bawaan, jadi aman untuk digunakan diid
sini.Singkatnya, terserah Anda untuk memilih apakah akan menggunakan nama bidang
id
ataupk
pintasan. Jika Anda tidak mengembangkan perpustakaan untuk Django dan menggunakan bidang kunci utama otomatis untuk semua model, aman digunakan diid
mana saja, yang terkadang lebih cepat. Dari sisi lain, jika Anda ingin akses universal ke bidang kunci utama (mungkin khusus), gunakan dipk
mana-mana. Sepertiga mikrodetik bukan apa-apa untuk web.sumber