django order_by ชุดแบบสอบถามขึ้นและลง


287

ฉันจะสั่งซื้อโดยลดการสอบถามที่ตั้งไว้ใน django ตามวันที่ได้อย่างไร

Reserved.objects.all().filter(client=client_id).order_by('check_in')

ฉันต้องการกรองจากมากไปหาน้อยทั้งหมดที่สำรองไว้โดยวันที่ check_in

คำตอบ:


550
Reserved.objects.filter(client=client_id).order_by('-check_in')

แจ้งให้ทราบก่อน-check_in

เอกสาร Django


models.somModalName.all (). order_b ('- วันที่ / เวลา')
Shedrack

1
-ก่อนชื่อคอลัมน์หมายถึงลำดับจากมากไปน้อยโดยไม่มี-ค่าเฉลี่ยจากน้อยไปหามาก
CallMarl

69
Reserved.objects.filter(client=client_id).order_by('-check_in')

เครื่องหมายขีดคั่น "-" ด้านหน้า "check_in" หมายถึงลำดับจากมากไปหาน้อย ลำดับจากน้อยไปมากเป็นนัย

เราไม่จำเป็นต้องเพิ่มทั้งหมด () ก่อนตัวกรอง () ยังคงใช้งานได้ แต่คุณจะต้องเพิ่มทั้งหมด () เมื่อคุณต้องการวัตถุทั้งหมดจากรูต QuerySet

เพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
สะอาดกว่าคำตอบที่ยอมรับไม่มีเหตุผลที่จะมี. all (). ตัวกรอง (xxx)
ลุค Dupin

19

คุณยังสามารถใช้คำสั่งต่อไปนี้:

Reserved.objects.filter(client=client_id).order_by('check_in').reverse()

4
คุณทำได้ แต่ฉันสงสัยอย่างยิ่งว่ามันจะมีประสิทธิภาพมากกว่าที่จะให้เซิร์ฟเวอร์ SQL จัดการกับคำสั่งอย่างน้อยก็ในทางทฤษฎี แม้ว่ามันจะดีและชัดเจน
Michael Scheper

1
@MichaelScheper ใช่แน่นอน นอกจากนี้ยัง.all().filter()ไม่จำเป็น .filter()เพียงอย่างเดียวก็ดี
Sam Creamer

14

สำหรับเรียงลำดับ:

Reserved.objects.filter(client=client_id).order_by('check_in')

สำหรับการสั่งซื้อมากไปน้อย:

1.  Reserved.objects.filter(client=client_id).order_by('-check_in')

หรือ

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]

1
ใครจะทำไมเคยต้องการที่จะใช้วิธีการที่ 2?
MichaelR

นั่นเป็นหนึ่งในตัวเลือกที่ใช้ได้ แต่วิธีที่ดีกว่าคือใช้วิธีที่ 1
anjaneyulubatta505


7

การเพิ่ม - จะเรียงตามลำดับจากมากไปน้อย คุณสามารถตั้งค่านี้ได้โดยเพิ่มการสั่งซื้อเริ่มต้นไปยังเมตาของรุ่นของคุณ นี่จะหมายความว่าเมื่อคุณทำแบบสอบถามคุณเพียงทำ MyModel.objects.all () และมันจะออกมาในลำดับที่ถูกต้อง

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)

3
  1. เรียงลำดับขึ้น

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. เรียงลำดับจากมากไปน้อย

    Reserved.objects.all().filter(client=client_id).order_by('-check_in')

- (ยัติภังค์) ใช้เพื่อระบุลำดับจากมากไปน้อย



-1

67

Reserved.objects.filter (ไคลเอนต์ = client_id) .order_by ( '- CHECK_IN')

'-' หมายถึงลำดับจากมากไปน้อยและสำหรับลำดับจากน้อยไปมากเพียงให้แอตทริบิวต์ของคลาส


1
โปรดให้บริบทมากขึ้นสำหรับคำถาม
Iman

สวัสดียินดีต้อนรับสู่ StackOverflow โปรดตรวจสอบคำตอบของคุณจัดรูปแบบให้ถูกต้องอธิบายมัน (นี่คือ "67" อยู่ด้านบน ???); คุณอาจจะหมายถึงstackoverflow.com/help/how-to-answerที่จะเรียนรู้วิธีการเขียน "ดี" คำตอบ
ปิแอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.