在django中若是咱們定義了一個User的model。就可使用User.objects.create()等方法.那麼在django的源碼中是如何實現這種寫法的呢?python
下面代碼從最外層簡單完成了django ORM的調用方法實現.django
ps:下面的代碼只是實現了django的最外面調用實現而已.code
class Manager: # manager類 def create(self): """ 用法:User.objects.all() """ return "django orm get function" def all(self): """ 用法:User.objects.all() """ return "django orm all function" class ModelBase(type): def __new__(cls, name, bases, attrs): if name == "Model": attrs["objects"] = Manager() return type.__new__(cls, name, bases, attrs) # Model類 class Model(object, metaclass=ModelBase): pass # 這個通常在django的models.py中間中的寫法 # 實現django中的objects覆蓋寫法 class UserManager(Manager): def create(self): return "django中能夠用objects覆蓋原來的orm方法" class User(Model): """下面是通常model字段定義,可忽略""" objects = UserManager() # 普通的django ORM用法 class Personal(Model): """下面是通常model字段定義,可忽略""" pass print(User.objects.create()) # django中能夠用objects覆蓋原來的orm方法 print(Personal.objects.create()) # django orm get function