我有 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
定义定义了存储记录的表,它们还定义了该对象的实例的外观及其行为方式。 objects
是 Model
类(而不是实例)上的一个特殊属性,它允许您对所有实例执行操作(例如查询表)。 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 中经常令人困惑,因为您可以通过与同一个类交互来获取它们。
请参阅文档以获取更多信息:
关于python - 每个 django 模型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729630/