我有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
感谢您的帮助,对不起我的英语。
UPD:
对不起,也许我的解释很差。
我需要一个用于操纵模型的通用函数。
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')
答案 0 :(得分:2)
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中经常令人困惑,因为你通过与同一个类进行交互来达到它们。
有关详细信息,请参阅文档: