簡單示例實現django的orm

簡單示例實現django的orm

在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
相關文章
相關標籤/搜索