รับบันทึกล่าสุดด้วยตัวกรองใน Django


92

ฉันพยายามรับวัตถุโมเดล Django ล่าสุด แต่ดูเหมือนจะไม่สำเร็จ

สิ่งเหล่านี้ไม่ทำงาน:

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

3
คุณได้ลอง:obj= Model.objects.filter(testfield=12).order_by('-id')[:1]
catherine

@catherine ทำงานอย่างมีเสน่ห์! : ง. คุณต้องการเขียนสิ่งนี้เป็นคำตอบเพื่อให้ฉันตรวจสอบได้หรือไม่
บริจาค

ในปี 2561 NewsPostImage.objects.filter(newsPostTarget=img_id).first(). หวังว่าจะช่วยได้
Ngatia Frankline

คำตอบ:


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

10
@DaveMerwin มันไม่ถูกต้อง; มีหลายวิธีในการแก้ปัญหานี้และทั้งคำตอบนี้และคำตอบอื่นถูกต้อง
จอร์แดน

1
หมายเหตุสิ่งนี้ทำให้สมมติว่า id เป็นจำนวนเต็มของคีย์หลักที่เรียงตามลำดับ ซึ่งปกติจะเป็นค่าเริ่มต้นสำหรับ django แต่บางครั้งก็ไม่เป็นเช่นนั้น
dalore

2
สิ่งนี้อาจเป็นอันตรายได้เนื่องจากตัวกรองอาจส่งคืนรายการที่ว่างเปล่า
Kingston Chan

'-id' ใช้เพื่อย้อนกลับคำสั่ง!
อินทรา

3
อาจเป็น. first () แทน [0]?
fevgenym

121

ดูเอกสารจาก django: https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

คุณต้องระบุฟิลด์ใน latest () เช่น.

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

หรือถ้ารุ่นของคุณระบุ Meta get_latest_by คุณสามารถปล่อยออกอาร์กิวเมนต์field_name earliest() or latest()Django จะใช้ฟิลด์ที่ระบุget_latest_byโดยค่าเริ่มต้น


2
"สนามทดสอบ" ต้องเป็นช่องวันที่หรือไม่
tani-rokk


17

latestได้รับการออกแบบมาเพื่อทำงานกับฟิลด์วันที่จริงๆ (อาจใช้งานได้กับประเภทที่สั่งซื้อทั้งหมดอื่น ๆ ด้วย แต่ไม่แน่ใจ) และวิธีเดียวที่คุณสามารถใช้ได้โดยไม่ต้องระบุชื่อฟิลด์คือการตั้งค่าget_latest_byแอตทริบิวต์เมตาเป็นที่กล่าวถึงที่นี่


8
มันใช้งานได้กับคีย์หลักคุณสามารถทำสิ่งนี้ได้เสมอ:Model.objects.latest('id')
Ander


0

คุณสามารถเปรียบเทียบกับสิ่งนี้ได้ที่นี่

ภาพ

latest('created')เหมือนกับorder_by('-created').first() โปรดแก้ไขฉันถ้าฉันผิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.