Chọn giữa hai ngày với Django


116

Tôi đang tìm kiếm một truy vấn chọn giữa các ngày với Django.

Tôi biết cách thực hiện việc này với SQL thô khá dễ dàng, nhưng làm thế nào để đạt được điều này bằng cách sử dụng Django ORM?

Đây là nơi tôi muốn thêm vào giữa ngày 30 ngày trong truy vấn của mình:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

Câu trả lời:


230

Sử dụng __rangetoán tử:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

Là "created_at" là một trường tùy ý trong một mô hình hay đây là nhật ký thực tế của cơ sở dữ liệu khi bản ghi được tạo?
Bigbob556677

@ Philip556677 Đó là một trường tùy ý trong một mô hình. Bạn có thể đặt tham số auto_now_add của DateField thành True để có được thông số dễ dàng.
Benbb96


1

hai phương pháp

.filter(created_at__range=[from_date, to_date])

Một phương pháp khác

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte có nghĩa là lớn hơn bằng
  • lte có nghĩa là ít hơn bằng

Đối tượng Q không cần thiết trong phương thức thứ hai, bạn có thể viết:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

Nếu bạn đang sử dụng DateTimeField, Lọc theo ngày sẽ không bao gồm các mục vào ngày cuối cùng.

Bạn cần chọn giá trị là ngày:

...filter(created_at__date__range=(start_date, end_date))
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.