• 1. DAY 2OpenERP二次开发技术培训
  • 2. 结束日期必须大于开始日期 课程名称不能相同 需要一个课程持续时间字段 课程天数和人数都不能为0 显示报名精度和剩余席位 课程需要存在不同的状态 审批开始后日期不能修改 可以在日历上看培训计划,能够按照科目分组和搜索新的需求?
  • 3. 约束条件?约束条件是指在OpenERP中输入一条记录的时候检查数据的完整性和有效性Python约束:_ constraints属性来定义一个OpenERP系统内部的约束数据库约束: _sql_constraints属性来定义一个数据库级别上的约束信息
  • 4. _constraints属性和_name一样是在osv.osv中定义的属性 用来定义oe中的python约束是一个三元元祖列表,内部的基本参数为(constraint_function, message, fields) @constraint_function: python定义的约束函数 @如果函数返回为false的时候返回的报错 @用来计算的字段
  • 5. _constraints属性在约束中定义的函数的签名该函数可以直接使用browse函数来获取当前记录的值如果返回False,则会引起一个odoo警告,此时无法保存 如果返回True,则表示约束正确
  • 6. _sql_constraints属性和_constraints写法类似,但是内部的基本元素是一个(name, sql_definition, message)的元祖 @name: 该约束的名称 @sql_definition: 定义在数据库中的函数 @message: 如果违反在数据库中的约束,将会显示的消息
  • 7. 基本内置方法函数的一些通用属性 @cr:当前数据库的游标,可以使用它来直接调用sql语句 @uid:当前用户的ID @ids:调用当前函数的记录的id列表 @context:为OpenERP中每一个函数都要使用的全局参数
  • 8. create方法 create(self, cr, uid, vals, context=None):名称老师开始时间结束时间持续时间座位数科目高等数学黄老师2014-12-82014-12-9130数学课线性代数胡老师2014-12-82014-12-9128数学课当前traning.lesson类中的数据名称老师开始时间结束时间持续时间座位数科目高等数学黄老师2014-12-82014-12-9130数学课线性代数胡老师2014-12-82014-12-9128数学课数学分析2014-12-12014-12-9830create的返回值会创建的记录的IDcreate通过给定的值向数据库中插入一条记录
  • 9. read方法 read(self, cr, uid, ids, fields, context=None):1. read函数通过一个指定的ID,和列表字段来获取指定记录上的部分字段 2. 如果给予的字段列表为空,默认读取所有字段 3. read函数会返回一个列表返回值
  • 10. write方法 write(self, cr, uid, ids, vals, context=None) 数学分析2014-12-12014-12-9830数学分析2014-12-22014-12-8630通过指定的ID和一个field_name:value的字典来修改指定记录的ID,这里的ID可以是一个整型列表或是一个整型 该函数的返回值为True或者False,表示修改错误还是正确
  • 11. unlink方法 unlink(self, cr, uid, ids, context=None) 给定一个id或者ids列表,然后删除这条记录,相当于执行数据库中的Delete指令
  • 12. search方法 search(self, cr, uid, domain, offset=0, limit=None, order=None, context=None, count=False)domain来定义搜索条件1.该函数用来根据给定的domain条件来搜索符合条件的记录ids 2. 返回值为一个id列表
  • 13. copy方法 copy(self, cr, uid, id, default = None, context = None)复制指定id的记录,并插入数据库。 如果只想复制字段值,不要在数据库中插入新记录,使用方法 copy_data。 Default 指定新记录的默认值 返回值为新复制的对象,copy_data函数返回一个新的field_name:value字典
  • 14. browse方法 browse( self, cr, uid, select, context=None, list_class=None, fields_process=None):browse可以直接使用一个整型,或者一个id列表返回值为分别为一个实例对象或者实例对象列表 每一个指定的id返回一个该条记录的实例对象 实例对象可以使用点(.)操作符直接访问该条记录的字段值 对于字段是关联字段的对象来说,点(.)操作符直接返回一个关联记录的对象或者对象列表返回给定id或id列表的实例对象,为最常用的函数
  • 15. name_get函数name_get( self, cr, uid, ids, context=None) 该函数取得对象中使用_rec_name中定义的字段值 一般重载该函数来控制一个对象在界面上显示的值 name_get函数的返回值是一个(id, name)的列表类似于[(1, u’数学 2’)]
  • 16. name_search函数name_search( self, cr, uid, name=‘’, domain=None, operator=“ilike”, context=None, limit = 100 ): 根据名称或domain条件搜索记录,返回记录名称列表函数的返回值和name_get一样,是一个(id, name)列表在关联字段中输入的时候,每次都会调用一次name_search函数 将返回的列表显示在下方
  • 17. 课程持续天数字段这个字段需要显示的值为当前课程的持续天数 可以通过界面上已有的两个字段‘开始时间’和‘结束时间’来计算该课程的持续天数计算出持续天数字段开始时间 – 结束时间
  • 18. function字段fields.function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type="float", fnct_search=None, relation=None, method=True, store=False, multi=False)常用参数:@fnct: 用来计算该字段使用的函数 @type: 该计算字段所使用的类型 @store:该字段是否要存储在数据库中 函数参数:@fnct_inv: 定义修改字段的行为,当设置该参数的时候,该字段可修改。 @fnct_search: 定义搜索该字段的行为,当设置该参数的时候,该字段可被搜索其他参数:@arg: fnct中定义的函数中使用的参数 @fnct_inv_arg: fnct_inv中定义的函数中使用的参数 @relation: 如果type类型设置的为关联字段的话,该参数用来制定关联到那一表 @method: 如果为True,则表示为fnct需要定义为对象内函数,否则为全局函数 @multi: 如果存在的话,表示该function字段会一次性赋值多个字段
  • 19. function字段fnct参数定义计算函数字段名称定义类型该字段是否存储在数据库中定义一个function基本字段必须要存在fnct、type、string字段,store默认值为False
  • 20. function字段method为True的时候的需要定义的函数签名multi没有定义的时候返回值是一个字典,{ID: value} 其中ID为需要计算的字段所在的记录ID value为计算结果cr:为数据库游标,直接使用sql语句的时候会使用得到 uid:执行这个函数的用户ID ids: 指向这个函数的所有记录ID,是一个整型列表 name:需要计算的字段名称 arg:定义字段时的arg属性中定义的值 context:为OpenERP中每一个函数都要使用的全局参数
  • 21. function字段参数详细解析method参数 是一个布尔值,只有True、False两个值,默认为True当值为True的时候,此时表示fnct参数中所取得函数为当前对象的函数,此时函数签名为: def fnct(self, cr, uid, ids, field_name, arg, context): 当值为False的时候,此时表示fnct参数中所取得函数为全局函数,此时函数签名为: def fnct(cls, cr, table, ids, field_name, arg, context):
  • 22. function字段参数详细解析multi参数 是一个字符串,可以在多个function字段中使用multi参数指定一个相同的字符串 这样计算参数的时候会在一个function函数中返回多个字段值当multi参数存在的时候,此时fnct参数定义的函数返回值和正常的不太一样正常情况下是一个id:value的字典,multi参数存在的时候会是一个 id:{‘field_name’: value}字典,其中field_name为需要返回值的字段名称变化为
  • 23. function字段参数详细解析fnct_inv参数 需要一个函数参数,用来定义修改字段的行为,当设置该参数的时候,该字段可修改 一般情况下函数字段都是只读字段,不可修改的不需要返回值,函数前面和fnct参数类似,但是多了一个value参数用来指定修改后的值 在界面上修改完后function字段后,function字段会重新计算,value值就会被丢弃
  • 24. function字段参数详细解析fnct_search参数 当store值为False的时候,此时数据不存在数据库中,是每次显示字段的时候重新被计算 该参数用来定义搜索该字段的行为,当搜索该参数的时候,调用该函数(界面上仍然不可搜索)函数的返回值是一个domain,此时会重新调用搜索函数进行搜索指的是可以使用search函数进行搜索了def _search_continue_days(self, cr, uid, obj, name, args, context):@obj:需要搜素字段所在的类实例 @name:需要搜索字段的名称 @args:搜索函数定义的搜索domainsearch(domain中含有定义了fnct_search参数的字段)调用fnct_search函数,且将domain传人进去使用上一个函数返回的domain,重新调用search函数
  • 25. function字段参数详细解析store参数:定义该字段是否存储在数据库中当值为False的时候,值不存在数据库中,每次需要显示在界面上时重新计算一次 一般来说对于简单的function字段推荐使用这种方式,虽然每次出现的时候都会重新 被计算,但是每次重新计算的计算量都会比较小,基本可以忽略 缺点是该字段不存储在数据库中,直接使用sql语句的时候无法取到值,另外该值不可以 被排序,搜索。 当值为True的时候,值存储在数据库中,和正常的所有字段都一样,没有定义fnct_inv情况下是只读的 优点很清楚,和正常字段一模一样,可以被搜索、排序等操作 当改当前记录中的任何一个字段的时候,function都不会被调用,所以当大批量更改某个字段值 的时候,该function会被调用多次,此时会对性能有很大影响
  • 26. function字段参数详细解析可以将store设置为一个 {‘object_name’: ( function_name, [‘field_name1’, ‘field_name2’], priority)} 字典此时该字段被设置为tranling.lesson类中的start_date,end_date字段改变的时候,调用 function_name函数之后返回的一个id列表,在该ids中重新计算该字段,是一个拉式的触发规则可以通过这里定义各种不同的规则,object_name可以为任何的类 function_name函数中返回的id列表作为fnct函数中的ids参数 [‘field_name1’, ‘field_name2’]为object_name类中的字段 priority为优先级,数字越小,会先执行
  • 27. function字段function字段基本上都是性能问题的关键
  • 28. 高级视图calendar日历的开始时间日历的结束时间日历上显示的值视图的类型
  • 29. 高级视图graph视图的类型默认显示的行默认显示的列显示的数据type类型控制默认显示的图标类型type可选值由pivot:多维报表,bar:柱状图,pie:饼图,line:坐标图
  • 30. 高级视图search