python - 每个 django 模型的函数

标签 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

感谢您的帮助,并对我的英语表示抱歉。

更新:

抱歉,也许我解释得不好。

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

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

最佳答案

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/

关于python - 每个 django 模型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729630/

相关文章:

python - search_field 按字段选择

python - CharField 文件名到 Django 中的 ImageFields

python - 具有缺失值的分类数据中的降维

python - Django Crispy 表单拆分字段布局

python - 来自 django 教程 was_published_recently.admin_order_field = 'pub_date'

django - TextField 不能为 null 或空白

python - 扩展 Django 用户模型无法访问属性

python - 在 Python 中检测 NUMLOCK/CAPSLOCK/SCRLOCK keypress/keyup

python - 模块未找到错误: No module named 'azure.mgmt.datafactory.models.RunFilterParameters'

python - 压缩嵌套列表