openerp create&;编写orm方法

openerp create&;编写orm方法,openerp,Openerp,有人能解释一下openerp中创建和编写orm方法的工作原理吗?事实上,我一直在使用这种方法,我不知道它在内部是如何工作的,如何在一个简单的程序上实现它 class dumval(osv.osv): _name = 'dum_val' _columns={ 'state':fields.selection([('done','confirm'),('cancel','cancelled')],'position',readonly=True),

有人能解释一下openerp中创建和编写orm方法的工作原理吗?事实上,我一直在使用这种方法,我不知道它在内部是如何工作的,如何在一个简单的程序上实现它

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',                  
    }

如果你能用这个例子来解释,那就太好了。

按照惯例,给_起的名字应该是dum.val,而不是dum\u 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)

有关更多详细信息,请查看:

几条评论,再加上一点细节

  • 正如卢卡斯所回答的,惯例是在模型名dum.val中使用句点。通常类似于my_module.my_模型,以确保没有名称冲突(例如帐户、发票、销售、订单)

  • 我不确定你在模型中的条件“必需”是否有效;这类事情通常在视图中完成,但值得一看字段在SQL模式中是如何定义的

  • create方法创建新记录(sqlinsert)。它接受一组值,应用您指定的任何默认值,然后插入记录并返回新ID。请注意,您可以进行复合创建,即,如果您正在创建和开具发票,则可以将发票行添加到字典中,并在一次创建中完成所有操作,OpenERP将为您处理相关字段(参考中的写入方法)


    write方法更新现有记录(SQL更新)。它接受一组值,并应用于您传递的所有ID。这一点很重要,如果您传递ID列表,则这些值将写入所有ID。如果您要更新单个记录,请传递一个条目列表,如果您要对记录进行不同的更新,则必须执行多个写调用。您还可以管理相关的f雅思写作。

    谢谢卢卡斯,这对我很有帮助。我对这个openerp完全是新手,所以我的下一个问题可能看起来有点愚蠢。使用创建和编写方法后,那些字典键、值会出现在我的数据库表中吗?是的。你可以通过:res=self.read(cr,uid,[new_id],'name','lname','fname','addr',context=context)获得它你应该使用res self.browse(cr,uid,new_id,context=context)而不是read.browse利用延迟加载,初始化缓存等。谢谢Adrian Merrall。它非常有用,在使用创建和写入方法后,我在数据库中看到了记录,现在一切都很清楚了。。