2011-01-21 37 views
7

Tôi muốn theo mặc định chỉ trả lại các trường hợp "đã xuất bản" (được xuất bản = True). Có thể ghi đè .objects để MyModel.objects.all() thực sự trả về MyModel.objects.filter (được xuất bản = True)?Có thể ghi đè .objects trên mô hình django không?

Điều này có hợp lý không? Làm thế nào tôi có được những cái chưa được xuất bản trong những trường hợp hiếm hoi mà tôi muốn chúng?

Trả lời

15

Bạn có thể thực hiện việc này bằng cách viết Manager tùy chỉnh - chỉ cần ghi đè phương thức get_queryset và đặt objects thành phiên bản Trình quản lý. Ví dụ:

class MyModelManager(models.Manager): 
    def get_queryset(self): 
     return super(MyModelManager, self).get_queryset().filter(published=True) 

class MyModel(models.Model): 
    # fields 
    # ... 

    objects = MyModelManager() 

Xem chi tiết docs để biết chi tiết. Đó là hợp lý nếu đó là sẽ được bình thường của bạn, trường hợp mặc định. Để được hủy xuất bản, hãy tạo một người quản lý khác mà bạn có thể truy cập bằng một cái gì đó như MyModel.unpublished_objects. Một lần nữa, các tài liệu có các ví dụ về loại điều này.

+0

Cứu tinh của tôi !!! Cảm ơn! –

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