开发工作的创造和创造写orm方法

时间:2014-04-02 11:52:46

标签: openerp

任何人都可以解释在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',                  
    }

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

2 个答案:

答案 0 :(得分:1)

有几条评论加上一些细节。

  1. 正如Lukasz所回答的,惯例是在模型名称dum.val中使用句点。通常类似于my_module.my_model,以确保没有名称冲突(例如account.invoice,sale.order)

  2. 我不确定您的条件是否需要"在模型中将工作;这种事情通常在视图中完成,但值得看看如何在SQL模式中定义字段。

  3. 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