items = Foo.objects.filter(createdate__lte=datetime.datetime.today(), createdate__gt=datetime.datetime.today()-datetime.timedelta(days=30)).\
values('createdate').annotate(count=Count('id'))
này sẽ (1) kết quả lọc để chứa 30 ngày qua, (2) chỉ chọn lĩnh vực và Tạo (3) tính của id, nhóm bởi tất cả các lĩnh vực được lựa chọn (ví dụ: Tạo ngày). Điều này sẽ trả về một danh sách các từ điển của các định dạng:
[
{'createdate': <datetime.date object>, 'count': <int>},
{'createdate': <datetime.date object>, 'count': <int>},
...
]
EDIT:
Tôi không tin rằng có một cách để có được tất cả các ngày, thậm chí những người có count == 0
, chỉ với SQL. Bạn sẽ phải chèn từng ngày bị thiếu thông qua mã python, ví dụ:
import datetime
# needed to use .append() later on
items = list(items)
dates = [x.get('createdate') for x in items]
for d in (datetime.datetime.today() - datetime.timedelta(days=x) for x in range(0,30)):
if d not in dates:
items.append({'createdate': d, 'count': 0})
Điều gì đó tôi đang tìm kiếm. Tuy nhiên, tôi cũng muốn bao gồm ngày, nơi mà các đối tượng đếm bằng 0. Làm thế nào tôi có thể làm điều đó? – dease
@dease tôi đã cập nhật câu trả lời của mình để phản ánh cách thực hiện điều đó. Tôi cũng đã thay đổi mã ban đầu để sử dụng các trường ngày tháng thay vì các trường datetime. – knbk
làm thế nào để đặt hàng sau này? –