我已閱讀官方Django documentation中的定義,我仍然對Manager
做了什麼感到困惑。django中的「經理」是什麼?
該文件說明它們允許您在數據庫表格/模型上操作。但我仍然不明白這一點。
有人可以向我解釋經理及其角色嗎?舉一個例子的答案會更好。
我已閱讀官方Django documentation中的定義,我仍然對Manager
做了什麼感到困惑。django中的「經理」是什麼?
該文件說明它們允許您在數據庫表格/模型上操作。但我仍然不明白這一點。
有人可以向我解釋經理及其角色嗎?舉一個例子的答案會更好。
一個管理員通常隱藏在django程序員身上,django用它來連接model
代碼和數據庫後端。
當查詢Django的ORM,你通過調用這樣做
from my_app.models import MyModel
mms = MyModel.objects.all()
在這種情況下,該功能的objects
部分就是由經理返回。如果你想爲MyModel只能永遠得到blue
MyModel
實例(數據庫可能包含red
型號太多),那麼你可以創建一個管理員和黑客模型因此
class BlueManager(models.Manager):
def get_query_set(self):
return super(BlueManager, self).get_query_set().filter(colour='Blue')
class MyModel(models.Model):
colour = models.CharField(max_length=64)
blue_objects = BlueManager()
,並呼籲
MyModel.blue_objects.all()
只會回報與colour
作爲blue
的對象。請注意,這是過濾模型的一種非常糟糕的方式!
如果他們要修改經理通常會返回的QuerySet
或者需要添加「表」級查詢(而不是常規的django「行」級別),通常需要修改Manager
接口。管理員的documentation相當完整,包含幾個例子。
要獲得額外功勞,請閱讀github上的源代碼。 https://github.com/django/django/blob/master/django/db/models/manager.py –
管理器是應用程序和數據庫之間的一種「門」。其中一件好事就是您可以爲模型定義您自己的基本查詢集。例如:如果你有模型「書」與「可用性」字段,你可以準備自己的查詢集,其過濾器的可用性類型的特定王:
models.py:
class AvailableBookManager(models.Manager):
def get_query_set(self):
return super(AvailableBookManager, self).get_query_set().filter(availability=1)
class Book(models.Model):
(...)#fields definition
objects = models.Manager() #default manager
available_objects = AvailableBookManager() #own manager
,現在你可以使用:
books = Book.available_objects.all()
的isntead:
books = Book.objects.filter(available=1)
'Managers'是一個相當複雜的Django類,如果你是新來programmi恩,我會堅持[教程](https://docs.djangoproject.com/en/dev/intro/tutorial01/),直到你對代碼更有信心。 – danodonovan