我有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')发布于 2016-04-20 05:27:13
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中通常是令人困惑的,因为您是通过与同一个类交互来获得它们的。
有关更多信息,请参阅文档:
https://stackoverflow.com/questions/36729630
复制相似问题