2016-04-19 52 views
1

我有Django的模型,我做了一個功能,例如:功能爲每一個Django模型

def function(django-model): 
    return django-model.objects.order_by('-date') 

我想對所有車型執行的功能,但我不知道它是如何工作的。

function(django-model-1()) 

function(django-model-2) 

回報:

AttributeError: Manager isn't accessible via django-model-1 instances 

感謝您的幫助和抱歉,我的英語水平。

Upd:

對不起,也許我很不好解釋。

我需要一個操作模型的通用函數。

from django-model-1.models import django-model-1 
from django-model-2.models import django-model-2 

    def function(django-model): 
     return django-model.objects.order_by('-date') # This is only for example 

function(django-model-1) 
function(django-model-2) 

但這是行不通的。

如果我沒有這個功能,這是工作。

django-model-1.objects.order_by('-date') 
+0

你是不是傳遞一個模式中,用戶通過一個實例。如果你打算通過這個模型,你應該在沒有括號的情況下通過它。再次傳遞類對象,而不是該類的實例。 – cdvv7788

回答

2

Django的Model定義定義表來存儲記錄,他們也定義什麼是對象的實例貌似及其行爲。 objectsModel類(不是在實例上)的特殊屬性,它允許您對所有(例如查詢表)進行操作。 objectsModelManager的一種。

你想要做的是定義一個自定義管理器。

假設你有一個模型定義,像這樣:

class SomeModel(models.Model): 
    pass 

好了,你可以定義一個custom manager爲模型用自定義的方法,像這樣:

class SomeModelManager(models.Manager): 
    def datesort(self): 
     return self.order_by('-date') 

現在,您可以附加你的經理到你的模型定義,並給它任何你想要的名稱:

class SomeModel(models.Model): 
    sorting = SomeModelManager() 

現在,您可以導入並使用排序經理:

>>> from some_app.models import SomeModel 
>>> SomeModel.sorting.date() # Not called on an instance! 
[sorted results] 

實現的關鍵是,你不想對SomeModel情況下工作,但實際的ModelManager本身。這在Django中經常令人困惑,因爲你通過與同一個類進行交互來獲得它們。

查看文檔的更多信息:

https://docs.djangoproject.com/en/1.9/topics/db/managers/