2010-12-15 29 views
5

Tôi đã khai báo một người quản lý cho mô hình sau, nhưng sau khi làm như vậy, tôi không còn có thể sử dụng List.objects.get(). Ai biết tại sao?Tại sao khai báo một người quản lý cho một mô hình Django, void "objects"

class List(models.Model): 
    title = models.CharField(max_length=20, unique=True) 
    archived = models.BooleanField() 

    archived_lists = ArchivedListManager() 
    active_lists = ActiveListManager() 

Và các nhà quản lý:

class ArchivedListManager(models.Manager): 
    def get_query_set(self): 
    return super(ArchivedListManager, self).get_query_set().filter(archived=True) 

class ActiveListManager(models.Manager): 
    def get_query_set(self): 
    return super(ActiveListManager, self).get_query_set().filter(archived=False) 

Lỗi này là type object 'List' has no attribute 'objects'

Trả lời

19

Như đã đề cập trong Django docs:

Nếu bạn sử dụng tùy chỉnh Manager đối tượng, hãy lưu ý Manager Django đầu tiên gặp (theo thứ tự mà chúng được xác định trong mô hình) có một trạng thái đặc biệt. Django diễn giải số Manager đầu tiên được định nghĩa trong một lớp là "mặc định" Manager và một số phần của Django sẽ sử dụng riêng biệt Manager cho mô hình đó. Do đó, bạn nên cẩn thận khi chọn người quản lý mặc định để tránh tình huống khi ghi đè get_query_set() dẫn đến việc không thể truy xuất các đối tượng bạn muốn làm việc.

Vì vậy, theo như "lý do" đi, nó cho phép bạn cung cấp trình quản lý mặc định của riêng bạn.

Giải pháp là đơn giản, mặc dù: chỉ cần thêm này

objects = models.Manager() 

đến lớp mô hình của bạn.

0

Thêm quản lý của riêng bạn ngăn chặn việc tạo ra các nhà quản lý chứng khoán.

"Manager names"

+0

Tôi đã làm cho người quản lý này "class ListManager (models.Manager): def get_query_set (self): return super (ListManager, self) .get_query_set()" in các đối tượng chính xác với List.objects, nhưng nó không thành công "List.objects.get (ví dụ = ví dụ) Làm thế nào tôi có thể sửa lỗi đó? – Josh

+0

Điều đó nghe như một câu hỏi hoàn toàn riêng biệt. –

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