gpt4 book ai didi

python - 每个 django 模型的函数

转载 作者:行者123 更新时间:2023-12-01 04:00:02 26 4
gpt4 key购买 nike

我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com