2010-06-06 39 views
5

Tôi đã tìm thấy liên kết đó: http://code.djangoproject.com/attachment/ticket/8424/time_filters.diff và thay đổi các tệp django 1.2 của tôi bằng cách thêm vào những gì bạn có thể thấy ở đó.
Nhưng bây giờ, khi tôi đang cố gắng để viết Entry.objects.filter (pub_date__hour = x) - kết quả được lỗi sau:Bộ lọc Django theo giờ

Field has invalid lookup: hour

Tôi nên làm gì nữa, để làm cho nó hoạt động?

(xin lỗi vì tiếng anh của tôi)

+0

Tôi không hoàn toàn chắc chắn nếu bản vá này có nghĩa là làm việc với 1.2. –

Trả lời

0

Có lẽ bạn định nghĩa pub_date như một DateField, nhưng nó phải là một DateTimeField? Bạn có thể đưa vào câu hỏi mã định nghĩa mô hình của mình không?

+0

có - đó là DateTimeField – DJPy

4
Entry.objects.filter(pub_date__hour = x) 

không được hỗ trợ từ django 1.2 - chỉ năm, tháng, ngày, week_day.

Sử dụng một cái gì đó như thế này:

Entry.objects.filter(pub_date__regex = '08:00') 

hoặc

Entry.objects.filter(pub_date__contains = '08:00') 

mà sẽ cung cấp cho bạn tất cả các đối tượng nhập cảnh với giờ (trên tất cả các năm).

1

Có lẽ tốt hơn của việc sử dụng một truy vấn SQL thô như:

Whatever.objects.raw("SELECT * FROM table WHERE TIME(pub_date) LIKE '%%08:30%%' ") 
2

Django 1,7 thêm hỗ trợ cho tra cứu tùy chỉnh và biến đổi. Một giờ biến đổi được thực hiện như sau trên PostgreSQL:

class HourExtract(models.Transform): 
    lookup_name = 'hour' 
    output_type = models.IntegerField() 

    def as_sql(self, compiler, connection): 
     lhs_sql, lhs_params = compiler.compile(self.lhs) 
     return "EXTRACT(hour FROM %s)" % lhs_sql, lhs_params 

models.DateTimeField.register_lookup(HourExtract) 

Bây giờ bạn có thể làm .filter (pub_date__hour__lte = x) và truy vấn tương tự khác trên giá trị giờ.

+0

Khi tôi làm điều đó và cố gắng lọc bằng cách sử dụng MyModel.objects.filter (date__hour = 8), django nói rằng nó mong đợi một strnig hoặc bộ đệm như thể date__hour được dự kiến ​​là một datetime và không phải là một số nguyên –

Các vấn đề liên quan