任何人都可以解释在openerp中创建和编写orm mehods的工作吗?实际上我一直坚持这种方法,我没有得到它在内部的工作方式,我怎么能在一个简单的程序中实现它。
class dumval(osv.osv):
_name = 'dum_val'
_columns={
'state':fields.selection([('done','confirm'),('cancel','cancelled')],'position',readonly=True),
'name':fields.char('Name',size=40,required=True,states={'done':[('required','False')]}),
'lname':fields.char('Last name',size=40,required=True),
'fname':fields.char('Full name',size=80,readonly=True),
'addr':fields.char('Address',size=40,required=True,help='enter address'),
}
_defaults = {
'state':'done',
}
如果你能用这个例子解释那就太好了。
答案 0 :(得分:1)
有几条评论加上一些细节。
正如Lukasz所回答的,惯例是在模型名称dum.val中使用句点。通常类似于my_module.my_model,以确保没有名称冲突(例如account.invoice,sale.order)
我不确定您的条件是否需要"在模型中将工作;这种事情通常在视图中完成,但值得看看如何在SQL模式中定义字段。
create方法创建新记录(SQL Insert)。它需要一个值的字典,应用您指定的任何默认值,然后插入记录并返回新的ID。请注意,您可以执行复合创建,即如果您正在创建和发票,则可以将发票行添加到字典中并在一个创建中执行所有操作,OpenERP将为您处理相关字段({write write method in {{ 3}})
write方法更新现有记录(SQL Update)。它需要一个值的字母,并适用于您传递的所有ID。这是一个重要的观点,如果您传递一个id列表,这些值将被写入所有ID。如果要更新单个记录,请传递一个条目的列表,如果要对记录执行不同的更新,则必须执行多个写入调用。您还可以通过写入来管理相关字段。
答案 1 :(得分:0)
通常给_name代替dum.val而不是dum_val。 在dumval类中,您可以编写一个方法:
def abc(cr, uid, ids, context=None):
create_dict = {'name':'xxx','lname':'xxx','fname':'xxx','addr':'xyz'}
# create new object and get id
new_id = self.create(cr, uid, write_dict, context=context)
# write on new object
self.write(cr, uid, new_id, {'lname':'yyy'}, context=context)
有关详细信息,请查看:https://www.openerp.com/files/memento/older_versions/OpenERP_Technical_Memento_v0.6.1.pdf