首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数用于每个django-model

函数用于每个django-model
EN

Stack Overflow用户
提问于 2016-04-20 05:16:14
回答 1查看 146关注 0票数 1

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

代码语言:javascript
复制
def function(django-model):
    return django-model.objects.order_by('-date')

我想为所有模型执行函数,但我不知道它是如何工作的。

代码语言:javascript
复制
function(django-model-1())

代码语言:javascript
复制
function(django-model-2)

返回:

代码语言:javascript
复制
AttributeError: Manager isn't accessible via django-model-1 instances

谢谢你的帮助,并为我的英语道歉。

更新:

对不起,也许我解释得不好。

我需要一个通用的函数来操纵模型。

代码语言:javascript
复制
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)

但它不起作用。

如果我不使用这个函数,它就是功。

代码语言:javascript
复制
django-model-1.objects.order_by('-date')
EN

回答 1

Stack Overflow用户

发布于 2016-04-20 05:27:13

Django Model定义定义了用于存储记录的表,它们还定义了该对象的实例的外观和行为。objectsModel类(而不是实例)上的一个特殊属性,它允许您对所有实例执行操作(例如查询表)。objectsModelManager的一种。

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

假设你有一个这样的模型定义:

代码语言:javascript
复制
class SomeModel(models.Model):
     pass

您可以使用自定义方法为您的模型定义一个custom manager,如下所示:

代码语言:javascript
复制
class SomeModelManager(models.Manager):
    def datesort(self):
        return self.order_by('-date')

现在,您可以将管理器附加到模型定义,并为其指定任意名称:

代码语言:javascript
复制
class SomeModel(models.Model):
    sorting = SomeModelManager()

现在,您可以导入并使用该排序管理器:

代码语言:javascript
复制
 >>> 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/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36729630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档