zoukankan      html  css  js  c++  java
  • django源码分析---- Model类型&Field类型

    djiango在数据库这方式自己实现了orm(object relationship mapping 对象关系模型映射)、这个主要是用到python 元类这一

    项python中的高级技术来实现的。

    class ModelBase(type):
        def __new__(cls,name,bases,attrs):
            # .....
            pass
    
        pass
    
    class Model(metaclass=ModelBase):
        pass
    
    # 在这之后所有的用户自定义模型都继承自Model类
    
    class Person(Model):
        name=CharField(max_length=8)
        

    类就对应到了数据库中的一张表、而类的的属性就对应到了表中的列;如这里的Person类就对应到了person表,name属性就对应到了name列

    上面例子中name属性的数据类型是CharField类型、这种类型与数据库端的char类型对应;在django中所以的列类型都继承自Field类型

    class Feild(RegisterLookupMixin):
        pass
    
    class AutoField(Field):
    class BigAutoField(AutoField):
    class BooleanField(Field):
    class CharField(Field):
    class CommaSeparatedIntegerField(CharField):
    class DateTimeCheckMixin:
    class DateField(DateTimeCheckMixin, Field):
    class DateTimeField(DateField):
    class DecimalField(Field):
    class DurationField(Field):
    class EmailField(CharField):
    class FilePathField(Field):
    class FloatField(Field):
    class IntegerField(Field):
    class BigIntegerField(IntegerField):
    class IPAddressField(Field):
    class GenericIPAddressField(Field):
    class NullBooleanField(Field):
    class PositiveIntegerRelDbTypeMixin:
    class PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField):
    class PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField):
    class SlugField(CharField):
    class SmallIntegerField(IntegerField):
    class TextField(Field):
    class TimeField(DateTimeCheckMixin, Field):
    class URLField(CharField):
    class BinaryField(Field):
    class UUIDField(Field):

    ----

  • 相关阅读:
    HDU 6071
    HDU 6073
    HDU 2124 Repair the Wall(贪心)
    HDU 2037 今年暑假不AC(贪心)
    HDU 1257 最少拦截系统(贪心)
    HDU 1789 Doing Homework again(贪心)
    HDU 1009 FatMouse' Trade(贪心)
    HDU 2216 Game III(BFS)
    HDU 1509 Windows Message Queue(队列)
    HDU 1081 To The Max(动态规划)
  • 原文地址:https://www.cnblogs.com/JiangLe/p/6722003.html
Copyright © 2011-2022 走看看