摘自《python基础教程》
因为觉得这里很有趣所以特意记录下来
平时编程语言我们如果要计算1-10的平方,用python的写法估计就是这样了
for x in range(10): print x*x
如果使用列表推导式的方法可以如下写
print [x*x for x in range(10)]
下面是找名字首字母相同的男孩,女孩
原始方法:
girls = ['alice', 'bernice', 'clarice'] boys = ['chris', 'arnold', 'bob'] print [b+' '+g for b in boys for g in girls if b[0]==g[0]]
Alex Martelli推荐的方法:
girls = ['alice', 'bernice', 'clarice']
boys = ['chris', 'arnold', 'bob']
letterGirls = {}
for girl in girls:
letterGirls.setdefault(girl[0], []).append(girl)
print [b+' '+g for b in boys for g in letterGirls[b[0]]]
如果第一个的复杂度是n*n 那么下面那个是不是n+n呢?
大家有更好的可以继续添加
OpenERP里面的 Scheduled Action其实就是一个计划任务
通过Administration–>Scheduler–>Configuration–>Scheduled Action 进去Schedule Action
Interval Number 每x次执行一次,配合Interval Unit用例如这里的意思就是每一天执行一次。
Next Excution Date 是下次执行时间。
Number of calls 循环次数,就是这个计划任务循环的次数,例如:我想连续执行30天,这里就填30,如果天-1就是无限循环。
这里的就是设置要执行的任务的方法
哪个Object(对象)里面的哪个Function(方法),此Function包括了哪些Arguments(参数)关于这个方法和参数其实就是一个定义在对象里的普通方法。
例如我这样设置
class object1_test1(osv.osv): _name =’object1.test1’ def fucnction1(self, cr, uid, args_1=False, args_2=False, context = None): .............. return True object1_test1()
那么在Arguments里就应该填(args_1, args_2,)这样就可以通过界面灵活配置计划执行的方法的参数
使用Scheduled Action地方有很多,例如发邮件,记录日志之类的,而且在开启了Scheduled Action的时候还有一个好处,就是某些操作耗时很长的,但是不需要经常调用的,可以通过他来调用。
最近的一个项目要求在Product_Template中增加类似与HTML中<img src=”" />的形式的图片,效果如图:
product_img_extra.py
from osv import osv, fields
import urllib2
import base64
class product_template_img(osv.osv):
_name = 'product.template'
_inherit = 'product.template'
_description = 'Product Extra Image'
def _get_image(self, cursor, user, ids, name, arg, context=None):
image = {}
opener = urllib2.build_opener()
res = self.read(cursor, user, ids, ['image_link'])
image_link = res[0]['image_link']
if image_link:
pic = base64.encodestring(opener.open(image_link).read())
for id in ids:
image[id] = pic
return image
_columns = {}
product_template_img()
product_img_extra_view.xml
<?xml version="1.0" encoding="utf-8"?> <openerp> <data> <record id="product_img_view" model="ir.ui.view"> <field name="name">product.template.product.form</field> <field name="model">product.template</field> <field name="type">form</field> <field name="inherit_id" ref="product.product_template_form_view" /> <field name="arch" type="xml"> <field name="name" position="before"> <field name="image" widget="image" nolabel="1" img_width="168" img_height="168" colspan="4"> <field name="image_link" colspan="4"> </field> </field> </record> </data> </openerp>
由于OpenERP的基本开发概念的其中一点是读取数据库动态生成界面.这时我就想到了使用fields.function来在界面生成时做一些特别的处理.
product_img_extra.py中的_columns将对productTemplate增加image_link和image两个column.其中image_link用于保存图片链接的column,当界面生成时通过链接读取图片.image为显示图片的column,但由于store已设置为False所以不会直接保存到数据库中,而只会在界面生成时运行.
因为需要读取外部链接,所以需要用到Python自带的urllib2模块,值得注意的是opener.open(image_link).read()获取回来的虽然已经是二进制数据,但仍需要使用base64.encodestring对其进行转码才可以被所识别.
之前搞了一个OpenERP动态view的实现,有些想法:
1.首先那一个tree view 来举例(如下图)。
它的显示要经过几个方法:fields_view_get –> fields_get –> read我们需要写一个object继承原来存这些数据的object,然后这个object重写fields_view_get–>fields_get–>read等方法,自己本身不需要view xml不需要columns,因为view我们是动态生成,columns则是从别的object里读出来。通过重写fields_view_get-可以达到自定义输出的viewfield_view_get 最后返回的是这样的信息
{},
'field_parent': False,
'fields': {},
'column_D': {},
'column_B': {},
'column_A': {},
'line_num': {} }
}
也就是说我们只要构建出一个这样格式的xml就可以返回view,其实经过分析下,这个xmk就是我们平时的模块的view的xml还有一个就是fields的说明。然后如果我们想根据这个view显示出来一个tree那么就要重写read方法这个是我们需要read返回的数组
[{},
{},
{}]
只要你重写的fields_view_get 和read 能返回这个就可以好像我上面图,返回一个自己构建的view。至于如何让保存修改,大家可以重写 create,unlink,write等方法。
大家有啥看发欢迎在下面提出来
近日开始真正地接触Open ERP(下简称OE)的模块开发. 一开始在朋友的推荐下装了一个AllInOne版的OE. AllInOne版的OE适合直接使用者,但对于开发者来说需要Debug时就十分麻烦,也不方法对OE源码的理解.
所以这两天还是下了一个源码版的来安装,由于发现网络上对于windows下的源码运行资料并不是很完整,也比较旧,所以自己写了这篇文章来总结一下.
oMoney Datingdelightfulgirls De Starstore Catalogue CALENDARS CELEBRITY CALENDARS MUSIC CALENDARS 2199 Dating Delightful Girls SaJoLabz Sites lMoney Datingdelightfulgirls De Starstore Catalogue CALENDARS CELEBRITY CALENDARS MUSIC CALENDARS 2199 Dating Delightful Girls SaJoLabr q Girls White