Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Django自定义模型管理器_Django_Django Models_Django Managers - Fatal编程技术网

如何使用Django自定义模型管理器

如何使用Django自定义模型管理器,django,django-models,django-managers,Django,Django Models,Django Managers,如何确定某个对象是单独的自定义模型管理器还是现有模型管理器的功能 例如,我可以创建一个模型管理器,其queryset是模型的所有实例。然后,我可以在该管理器中创建函数,以返回子集,如仅列为private或public的实例 或者,我可以为每个返回私有实例和公共实例查询集的人创建一个单独的自定义模型管理器 例如: 或 来自Python的禅宗: >>> import this The Zen of Python, by Tim Peters ... Explicit is

如何确定某个对象是单独的自定义模型管理器还是现有模型管理器的功能

例如,我可以创建一个模型管理器,其queryset是模型的所有实例。然后,我可以在该管理器中创建函数,以返回子集,如仅列为private或public的实例

或者,我可以为每个返回私有实例和公共实例查询集的人创建一个单独的自定义模型管理器

例如:


来自Python的禅宗:

>>> import this
The Zen of Python, by Tim Peters

...    
Explicit is better than implicit.
...
>>> 
可能您的情况比我从您的代码示例推断的更复杂,但我认为您应该使用一个过滤器:

Video.objects.filter(private=False)
如果您试图为常用筛选器保留类型笔划,请记住QuerySet是惰性的,因此您可以存储它们:

private_videos = Video.objects.filter(private=False)
...
private_videos.objects.filter(director='Frederico Felini').order_by('-year')
第一次分配不会触发与数据库的通信。将自定义管理器用于更复杂的工作


我见过很多模型方法和/或自定义管理器的这种模式,因为Django模板系统sux^H^H^H^是故意禁用的(如果不创建模板过滤器,就不能使用参数调用方法)。如果是这种情况,请将模板层切换到Jinja2。

从Python的zen:

>>> import this
The Zen of Python, by Tim Peters

...    
Explicit is better than implicit.
...
>>> 
可能您的情况比我从您的代码示例推断的更复杂,但我认为您应该使用一个过滤器:

Video.objects.filter(private=False)
如果您试图为常用筛选器保留类型笔划,请记住QuerySet是惰性的,因此您可以存储它们:

private_videos = Video.objects.filter(private=False)
...
private_videos.objects.filter(director='Frederico Felini').order_by('-year')
第一次分配不会触发与数据库的通信。将自定义管理器用于更复杂的工作

我见过很多模型方法和/或自定义管理器的这种模式,因为Django模板系统sux^H^H^H^是故意禁用的(如果不创建模板过滤器,就不能使用参数调用方法)。如果是这样,请将模板层切换到Jinja2