Tôi có một mô hình có chứa datefield
. Tôi đang cố gắng để có được bộ truy vấn của mô hình đó có chứa tuần hiện tại (bắt đầu vào thứ hai).Bộ lọc truy vấn Django theo số tuần ISO
Vì vậy, kể từ Django datefield
chứa đơn giản datetime.date
mô hình tôi giả định lọc bằng cách sử dụng .isocalendar()
. Về mặt lý thuyết, đó chính xác là những gì tôi muốn mà không có sự so sánh và tính toán bổ sung nào theo ngày trong tuần hiện tại.
Vì vậy, những gì tôi muốn làm về cơ bản có hiệu lực .filter
tuyên bố là để cư xử theo logic này:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Tuy nhiên, làm thế nào để viết nó bên tuyên bố bộ lọc? .filter(model__date__isocalendar=datetime.date.today().isocalendar())
sẽ cho kết quả sai (giống như so với hôm nay không phải tuần này).
Như đào đúng http://docs.python.org/library/datetime.html tôi đã không nhận thấy bất kỳ tùy chọn tuần ngày khác ...
Lưu ý từ tài liệu:
date.isocalendar() Return 3 tuple, (ISO năm , Số tuần ISO, ISO các ngày trong tuần).
Cập nhật:
Mặc dù tôi không thích giải pháp của việc sử dụng các dãy nhưng đó là lựa chọn tốt nhất. Tuy nhiên, trong trường hợp của tôi, tôi đã tạo một biến số đánh dấu sự bắt đầu của tuần và chỉ xem xét giá trị lớn hơn hoặc bằng nhau bởi vì nếu tôi đang tìm kiếm một kết quả phù hợp cho tuần hiện tại. Trong trường hợp cho số lượng trong tuần Nó sẽ yêu cầu cả hai đầu.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)
Tôi không biết nếu sự hỗ trợ orm đó nhưng bạn có thể dự phòng để truy vấn thô nếu nó không https://docs.djangoproject.com/en/dev/topics/db/sql/ – dm03514
Tôi biết tùy chọn này dm03514, nhưng tôi muốn viết bộ lọc của riêng mình sau đó. Đó cũng là một lựa chọn nhưng tôi yêu cầu để biết có lẽ nó có thể đạt được điều này bằng cách sử dụng hành động mặc định trong Django mà không cần mở rộng nó. – JackLeo
btw có mô-đun date python tốt đẹp có thể hữu ích http://pypi.python.org/pypi/python-dateutil – aisbaa