在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