2013-02-04 36 views
6

Tôi đã đọc định nghĩa trong chính thức Django documentation và vẫn còn bối rối bởi những gì một Manager nào."Người quản lý" trong django là gì?

Tài liệu nói rằng chúng cho phép bạn hoạt động trên các bảng/mô hình cơ sở dữ liệu. Nhưng tôi vẫn không hiểu điều này.

Ai đó có thể giải thích cho người quản lý và vai trò của họ đối với tôi không? Một câu trả lời với một ví dụ sẽ là thích hợp hơn.

+0

'Managers' khá một lớp django phức tạp, nếu bạn là người mới đến programmi Tôi muốn gắn bó với [hướng dẫn] (https://docs.djangoproject.com/en/dev/intro/tutorial01/) cho đến khi bạn tự tin hơn với mã. – danodonovan

Trả lời

5

Người quản lý thường là điều gì đó bị ẩn khỏi các lập trình viên django mà django sử dụng để giao tiếp giữa mã model và phần phụ trợ cơ sở dữ liệu.

Khi bạn truy vấn ORM django, bạn làm như vậy thông qua các cuộc gọi đến

from my_app.models import MyModel 

mms = MyModel.objects.all() 

Trong trường hợp này, objects một phần của chức năng là những gì được trả lại bởi người quản lý. Nếu bạn muốn MyModel chỉ bao giờ có được blueMyModel trường (cơ sở dữ liệu có thể chứa red mô hình quá) sau đó bạn có thể tạo một trình quản lý và hack mô hình của bạn do đó

class BlueManager(models.Manager): 
    def get_query_set(self): 
     return super(BlueManager, self).get_query_set().filter(colour='Blue') 

class MyModel(models.Model): 
    colour = models.CharField(max_length=64) 
    blue_objects = BlueManager() 

và gọi

MyModel.blue_objects.all() 

sẽ chỉ trở lại các đối tượng có colourblue. Lưu ý, đây là một cách rất nghèo để lọc các mô hình!

Thông thường, bạn cần phải sửa đổi giao diện Manager nếu họ sửa đổi số QuerySet mà người quản lý thường trả lại hoặc nếu bạn cần thêm truy vấn cấp "bảng" (thay vì hàng "django" hàng). documentation dành cho người quản lý khá hoàn chỉnh và chứa một vài ví dụ.

+0

Để biết thêm tín dụng, hãy đọc mã nguồn trên github. https://github.com/django/django/blob/master/django/db/models/manager.py –

3

Trình quản lý là một loại 'cổng' giữa ứng dụng và cơ sở dữ liệu. Một trong những điều tốt đẹp là bạn có thể xác định bạn sở hữu queryset cơ sở cho mô hình. Ví dụ: nếu bạn có mô hình 'Sách' với trường 'sẵn sàng', bạn có thể chuẩn bị queryset riêng, mà lọc vua cụ thể của loại sẵn có:

models.py:

class AvailableBookManager(models.Manager): 
    def get_query_set(self): 
     return super(AvailableBookManager, self).get_query_set().filter(availability=1) 

class Book(models.Model): 
    (...)#fields definition 

    objects = models.Manager() #default manager 
    available_objects = AvailableBookManager() #own manager 

và bây giờ bạn có thể sử dụng :

books = Book.available_objects.all() 

isntead của:

books = Book.objects.filter(available=1) 
Các vấn đề liên quan