Tùy chọn khác là nếu bạn có bộ lọc mà bạn luôn muốn áp dụng, hãy thêm custom manager vào mô hình được đề cập luôn áp dụng bộ lọc cho kết quả được trả về.
Một ví dụ điển hình là mô hình Event
, trong đó 90% truy vấn bạn thực hiện trên mô hình bạn sẽ muốn một cái gì đó như Event.objects.filter(date__gte=now)
, tức là bạn thường quan tâm đến số Events
sắp tới. Điều này sẽ trông giống như:
class EventManager(models.Manager):
def get_query_set(self):
now = datetime.now()
return super(EventManager,self).get_query_set().filter(date__gte=now)
Và trong mô hình:
class Event(models.Model):
...
objects = EventManager()
Nhưng một lần nữa, điều này áp dụng các bộ lọc tương tự chống lại tất cả các truy vấn mặc định thực hiện trên mô hình Event
và như vậy là không được linh hoạt một số các kỹ thuật được mô tả ở trên.
Cám ơn làm rõ khái niệm thiết kế django. Tôi đang sử dụng phương pháp phương pháp mô hình. – Ber
Xin chào mọi người là 2014 ngay bây giờ! Khoảng 6 năm sau, các thư viện JS đã đạt được tiến bộ rất lớn và việc lọc dữ liệu không quá lớn nên được thực hiện tốt hơn ở phía máy khách với sự hỗ trợ của một số thư viện java script hay ít nhất là AJAX-ed. – andi
@andi: Tôi chắc chắn đồng ý với các tập dữ liệu lớn vừa phải, ví dụ: thậm chí hàng ngàn hàng trong một bảng. Đã làm việc trên cơ sở dữ liệu với hàng triệu hàng, vẫn có một nơi để lọc phía máy chủ :) –