每个django模型的功能

时间:2016-04-19 21:16:14

标签: python django django-models

我有django-models,我做了一个函数,例如:

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')

1 个答案:

答案 0 :(得分:2)

Django Model定义定义了用于存储记录的表,它们还定义了该对象的实例以及它的行为方式。 objectsModel类(不在实例上)的特殊属性,允许您对所有实例(例如查询表)执行操作。 objects是一种ModelManager

您要做的是定义自定义管理器。

假设你有一个类似的模型定义:

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/