Dapatkan catatan terbaru dengan filter di Django


90

Saya mencoba untuk mendapatkan objek model Django terbaru tetapi tampaknya tidak berhasil.

Tak satu pun dari ini berfungsi:

obj = Model.objects.filter(testfield=12).latest()
obj = Model.objects.latest().filter(testfield=12)

3
Sudahkah Anda mencoba:obj= Model.objects.filter(testfield=12).order_by('-id')[:1]
catherine

@catherine, bekerja seperti pesona! : D. Anda ingin menulis ini sebagai jawaban sehingga saya dapat memeriksanya?
doniyor

Di 2018 NewsPostImage.objects.filter(newsPostTarget=img_id).first(). Semoga membantu.
Ngatia Frankline

Jawaban:


101
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

10
@Daveerwin itu tidak salah; Ada banyak cara untuk memecahkan masalah ini, dan jawaban ini dan yang lainnya benar.
Jordan

1
Perhatikan bahwa ini membuat asumsi bahwa id adalah bilangan bulat kunci primer yang diurutkan. Yang biasanya merupakan default untuk django, tetapi terkadang tidak.
dalore

2
Ini bisa berbahaya karena filter dapat mengembalikan daftar kosong
Kingston Chan

'-id' digunakan untuk membalik urutan!
Indra

3
mungkin .first () bukan [0]?
fevgenym

119

Lihat dokumen dari django: https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

Anda perlu menentukan bidang di latest (). misalnya.

obj= Model.objects.filter(testfield=12).latest('testfield')

Atau jika Meta model Anda menetapkan get_latest_by, Anda dapat meninggalkan field_nameargumen ke earliest() or latest(). Django akan menggunakan bidang yang ditentukan get_latest_bysecara baku.


2
Apakah "testfield" harus berupa field tanggal?
tani-rokk


17

latestbenar-benar dirancang untuk bekerja dengan bidang tanggal (mungkin juga berfungsi dengan jenis urutan total lainnya, tapi tidak yakin). Dan satu-satunya cara Anda dapat menggunakannya tanpa menentukan nama bidang adalah dengan menyetel get_latest_byatribut meta, seperti yang disebutkan di sini .


8
Ini berfungsi dengan kunci primer, Anda selalu dapat melakukan sesuatu seperti ini:Model.objects.latest('id')
Ander

6

obj= Model.objects.filter(testfield=12).order_by('-id')[:1] adalah solusi yang tepat

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.