Thêm truy vấn tùy chỉnh cho người quản lý là quy ước Django. Từ tài liệu Django trên custom managers:
Thêm phương thức quản lý bổ sung là cách ưa thích để thêm chức năng "mức bảng" vào mô hình của bạn.
Nếu đó là ứng dụng riêng tư của bạn, từ quy ước không quan trọng lắm - thực sự codebase nội bộ của công ty có một vài phân loại có thể thuộc về người quản lý tùy chỉnh.
Tuy nhiên, nếu bạn đang viết một ứng dụng mà bạn sẽ chia sẻ với người dùng Django khác, thì họ sẽ mong đợi được xem findBy
trên trình quản lý tùy chỉnh.
Tôi không nghĩ rằng các vấn đề thừa kế bạn đề cập đến quá xấu. Nếu bạn đọc số custom managers and model inheritance docs, tôi không nghĩ bạn sẽ bị bắt. Verbosity viết .objects
là chịu đựng được, chỉ vì nó là khi chúng ta làm các truy vấn sử dụng XYZ.objects.get()
và XYZ.objects.all()
Dưới đây là một vài lợi thế của việc sử dụng các phương pháp quản lý theo ý kiến của tôi:
Tính nhất quán của API. Phương thức của bạn findBy
thuộc về get
, filter
, aggregate
và các phương thức còn lại. Bạn muốn biết những gì bạn có thể thực hiện trên trình quản lý XYZ.objects
? Thật đơn giản khi bạn có thể quan sát với dir(XYZ.objects)
.
Phương pháp tĩnh "lộn xộn" không gian tên dụ. XYZ.findBy()
là tốt nhưng nếu bạn xác định một phương pháp tĩnh, bạn cũng có thể làm xyz.findBy()
. Chạy tra cứu findBy
trên một cá thể cụ thể không thực sự hợp lý.
Độ ẩm. Đôi khi bạn có thể sử dụng cùng một người quản lý trên nhiều mô hình.
Đã nói tất cả điều đó, tùy thuộc vào bạn. Tôi không biết lý do giết người tại sao bạn không nên sử dụng một phương pháp tĩnh.Bạn là người lớn, đó là mã của bạn và nếu bạn không muốn viết findBy
làm phương thức của người quản lý, bầu trời sẽ không rơi vào;)
Để đọc thêm, tôi khuyên bạn nên đăng bài trên blog Managers versus class methods bởi James Bennett, người quản lý phát hành của Django.
Cảm ơn alasdir, lời giải thích của bạn có ý nghĩa và liên kết bạn đã thêm rất hữu ích! – Xerion