Bộ truy vấn django order_by, tăng dần và giảm dần


287

Làm cách nào tôi có thể đặt hàng bằng cách giảm dần truy vấn của mình trong django theo ngày?

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

Tôi chỉ muốn lọc từ giảm dần tất cả Dự trữ theo ngày check_in.

Câu trả lời:


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

Chú ý -trước check_in.

Tài liệu Django


model.somModalName.all (). order_b ('- ngày / giờ')
Shedrack

1
-trước tên cột có nghĩa là thứ tự giảm dần mà không -có nghĩa là tăng dần.
CallMarl

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

Dấu gạch nối "-" phía trước "check_in" biểu thị thứ tự giảm dần. Thứ tự tăng dần được ngụ ý.

Chúng ta không phải thêm tất cả () trước bộ lọc (). Điều đó vẫn sẽ hoạt động, nhưng bạn chỉ cần thêm tất cả () khi bạn muốn tất cả các đối tượng từ Truy vấn gốc.

Thêm về điều này tại đây: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
Sạch hơn câu trả lời được chấp nhận, không có lý do để có .all (). Filter (xxx).
Luke Dupin

19

Bạn cũng có thể sử dụng hướng dẫn sau:

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

4
Bạn có thể, nhưng tôi hoàn toàn nghi ngờ rằng sẽ hiệu quả hơn khi để máy chủ SQL xử lý đơn hàng, ít nhất là trên lý thuyết. Mặc dù vậy, nó rất đẹp và rõ ràng.
Michael Scheper

1
@MichaelScheper vâng, chắc chắn rồi. Ngoài ra, .all().filter()không cần thiết. .filter()một mình là ổn
Sam Creamer

14

cho thứ tự tăng dần:

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

cho thứ tự giảm dần:

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

hoặc là

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

1
Tại sao bất cứ ai cũng muốn sử dụng phương pháp thứ 2?
MichaelR

Đó là một trong những lựa chọn có sẵn. Nhưng, cách tiếp cận tốt hơn là sử dụng phương pháp 1.
anjaneyulubatta505 18/03/19

12

Nó hoạt động loại bỏ .all():

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

3
Điều này về cơ bản giống với câu trả lời của @ leonardo-z, phải không?
Michael Scheper

7

Thêm - sẽ sắp xếp nó theo thứ tự giảm dần. Bạn cũng có thể thiết lập điều này bằng cách thêm một thứ tự mặc định vào meta của mô hình của bạn. Điều này có nghĩa là khi bạn thực hiện một truy vấn, bạn chỉ cần thực hiện MyModel.objects.all () và nó sẽ xuất hiện theo đúng thứ tự.

class MyModel(models.Model):

    check_in = models.DateField()

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

3
  1. Thứ tự tăng dần

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. Thứ tự giảm dần

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

- (dấu gạch nối) được sử dụng để chỉ ra thứ tự giảm dần ở đây.


1

Đây là làm việc cho tôi.

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]

-1

67

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

'-' biểu thị thứ tự giảm dần và đối với thứ tự tăng dần, chỉ cung cấp thuộc tính lớp


1
Vui lòng cung cấp thêm ngữ cảnh cho câu hỏi của bạn
iman

Xin chào, chào mừng bạn trên StackOverflow, vui lòng xem lại câu trả lời của bạn, định dạng chính xác, giải thích nó ("67" trên đầu trang này là gì ???); bạn có thể tham khảo stackoverflow.com/help/how-to-answer để tìm hiểu cách viết câu trả lời "tốt"
Pierre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.