字段类型及字段定义
Django中的字段可以引用已经写好的字段,利用这些已有的字段即可进行字段的定义,也可以自行去设计字段。
在重启server 时,django利用ORM方法来实现转换成SQL,最后去数据库中创建表和字段。
Django 中的字段类型有:
AutoField 自增列 = int(11)
CharField 字符串字段,max_length 参数
BooleanField 布尔类型=tinyint(1) 不能为空,lank=True
ComaSeparatedIntegerField 用逗号分割的数字=varchar
DateField 日期类型 date
DateTimeField 日期类型 datetime
Decimal 十进制小数类型 = decimal 必须指定整数max_digits和小数位decimal_places
EmailField 字符串类型(正则表达式邮箱)
FloatField 浮点类型 = double
IntegerField 整型
BigIntegerField 长整形
IPAddressField 字符串类型(ip4正则表达式)不再使用
GenericIPAddressField 字符串类型(ip4和ip6是可选的)
NullBooleanField 允许为空的布尔类型
PositiveIntegerFiel 正Integer
PositiveSmallIntegerField 正smallInteger
SlugField 减号、下划线、字母、数字
SmallIntegerField 数字
TextField 字符串=longtext
TimeField 时间 HH:MM[:ss[.uuuuuu]]
URLField 字符串,地址正则表达式
BinaryField 二进制
ImageField 图片
FilePathField 文件
Odoo中的字段是限制,基于Odoo 10的字段,总共就那么几种,可以看源码:fields.py
字段类型:
SpecialValue 还没用过,继承自object
FailedValue 还没用过,继承自SpecialValue
MetaField 字段类的原类,继承自type
Field 继承自object
Boolean Boolean,继承自Field
Integer 整数型,继承自Field
Float 浮点型,继承自Field
Monetary 货币型,继承自Field
_String 字符串型,继承自Field
Char Char型,继承自_String
Text Text型,长字符串,继承自_String
Html HTML挂件使用,继承自_String
Date 日期型,继承自Field
Datetime 时间型,继承自Field
Binary 二进制型,继承自Field
Selection Selection 型,继承自Field
Reference 引用字段,较为特殊
_Relational 关系型,继承自Field
Many2one M2o字段,用于多对一关系
UnionUpdate
_RelationalMulti x2m的抽象字段
One2many o2m字段,用于一对多关系
Many2many M2m字段,用于多对多关系
Serialized 序列型,继承自Field
Id id,自增,继承自Field
Django的类及其字段的定义:
from django.db import models
class UseGroup(models.Model):
uid = models.AutoField(primary_key=True) #主键,自增
caption = models.CharField(max_length=32,unique=True) #唯一索引
ctime = models.DateField(auto_now_add=True,null=True) #创建时生成时间
uptime = models.DateField(auto_now=True,null=True) #更新时自动更新时间
Odoo的类及其字段的定义:
from odoo import api, fields, models, exceptions, _
class CostCenter(models.Model):
_name = "cost.allocation.unit.costcenter"
_description = "Kthrp Cost Allocation Unit Costcenter"
costcenter_id = fields.Many2one(comodel_name='account.cost.center', string='Cost Center', required=True,
domain=[('active', '=', True), ('type', '=', 'normal')])
manage_classfication = fields.Selection(related='costcenter_id.manage_classfication', readonly=True,
string='Manage Classfication')
字段的创建过程
Django的字段的创建过程
Django 中字段定义,在重启server 时,django利用ORM方法来实现转换成SQL,最后去数据库中创建表和字段。是重启后自动去生成SQL,创建更新表。
Odoo的字段的创建过程
odoo中字段定义,也是在重启后,会生成SQL,但是直到升级时,才去将执行SQL。
执行过程:
odoo中的init中的registry方法。
_load_data 、两个create(ir_model)、unlink(ir_model)和write(ir_model)
调用init_models
_load_data方法中的odoo.registry来执行调用init_models方法。
init_models 调用_auto_init
model._auto_init() 调用_auto_init
self._auto_init 调用_field_create
self._field_create() #执行UPDATE ,写入字段
而重启并不会直接生成SQL,执行SQL,等到点击升级才会去走registry方法。
点击升级后的操作:
button_immediate_install 调用_button_immediate_function
_button_immediate_function:
重置环境
更新registry,调用init方法
调用action_after_function