Как добавить функцию в openERP 7?

1

Я пытался создать новый модуль в openERP версии 7. В моем классе у меня есть этот код:

_columns = {
'hour_from' : fields.float('Work from', required=True),
    'hour_to' : fields.float("Work to", required=True),
     'totalhour': fields.function(_total, method=True, string='Total Attendance', multi="_total"),
}

Я не нашел решения для добавления функции в свой класс. Функция, которая мне нужна, возвращает сумму hour_from и hour_to. Может ли кто-нибудь помочь?

Я пробую этот код, прежде чем объявлять свои _columns:

def _total(self, cr, uid, ids, name, args, context=None):

  res = {}

    res['totalhour'] = hour_from + hour_to

return res

Когда я перезапускаю сервер, я получаю эту ошибку:

No handler found.

(Обновление от другого сообщения)

Ну, это мой код:

def _total(self, cr, uid, ids, name, args, context=None):
res = {}
for record in self.browse(cr, uid, ids, context=context):
    res['totalhour'] = record.hour_from + record.hour_to
return res

class hr_analytic_timesheet(osv.osv):
_name = "hr.analytic.timesheet"
_inherit = "hr.analytic.timesheet"


_columns = {
'hour_from' : fields.float('Work from', required=True, help="Start and End time of working.", select=True),
    'hour_to' : fields.float("Work to", required=True),

     'totalhour' : fields.function(_total, type='float', method=True, string='Total Hour'),
}

hr_analytic_timesheet()

Мой xml:

 <record id="view_ov_perf_timesheet_line_tree" model="ir.ui.view">
        <field name="name">hr.analytic.timesheet.tree</field>
        <field name="model">hr.analytic.timesheet</field>
        <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/>
        <field name="arch" type="xml">
                  <field name="unit_amount" position="replace">

                    <field name="hour_from" widget="float_time" string="Heure début"/>
                    <field name="hour_to" widget="float_time" string="Heure fin" />
                     <field name="totalhour"  widget="float_time"/>

                   </field>

        </field>
    </record>

Когда я хочу добавить или отредактировать строку, у меня есть эта ошибка:

File "C:\Program Files\OpenERP 7.0-20130205-000102\Server\server\.\openerp\osv\orm.py", line 3729, in _read_flat
KeyError: 53

вы можете помочь мне


привет, это мой код:

def _total(self, cr, uid, ids, name, args, context=None):
res = {}
for record in self.browse(cr, uid, ids, context=context):
    res['totalhour'] = record.hour_from + record.hour_to
return res

class hr_analytic_timesheet(osv.osv):
_name = "hr.analytic.timesheet"
_inherit = "hr.analytic.timesheet"


_columns = {
'hour_from' : fields.float('Work from', required=True, help="Start and End time of working.", select=True),
    'hour_to' : fields.float("Work to", required=True),

     'totalhour' : fields.function(_total, type='float', method=True, string='Total Hour'),
}

hr_analytic_timesheet()

Мой xml:

 <record id="view_ov_perf_timesheet_line_tree" model="ir.ui.view">
        <field name="name">hr.analytic.timesheet.tree</field>
        <field name="model">hr.analytic.timesheet</field>
        <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/>
        <field name="arch" type="xml">
                  <field name="unit_amount" position="replace">

                    <field name="hour_from" widget="float_time" string="Heure début"/>
                    <field name="hour_to" widget="float_time" string="Heure fin" />
                     <field name="totalhour"  widget="float_time"/>

                   </field>

        </field>
    </record>

когда я хочу добавить или удалить строку, у меня есть эта ошибка:

File "C:\Program Files\OpenERP 7.0-20130205-000102\Server\server\.\openerp\osv\orm.py", line 3729, in _read_flat
KeyError: 53
  • 0
    не могли бы вы поделиться полным стеком исключений? Это даст больше представления об ошибке.
Теги:
function
field
openerp

2 ответа

2
Лучший ответ

Можете ли вы определить, что вы выполняете эту функцию, и снова проверьте:

def _total(self, cr, uid, ids, name, args, context=None):
    res = {}
    for record in self.browse(cr, uid, ids, context=context):
        res[record.id] =  record.hour_from + record.hour_to
    return res

или вот так:

def _total(self, cr, uid, ids, name, args, context=None):
    res = {}
    for record in self.browse(cr, uid, ids, context=context):
        res[record.id] = {'totalhour' : 0.0}
        res[record.id]['totalhour'] = record.hour_from + record.hour_to
    return res

С Уважением,

  • 0
    Спасибо, очень очень соответствует, это работа с первой функцией, что вы снова
  • 0
    Спасибо за сохранение моего **
0

Вы можете определить свою функцию следующим образом:

def _total(self, cr, uid, ids, name, args, context=None):
    res = {}
    for record in self.browse(cr, uid, ids, context=context):
        res[record.id] = record.hour_from + record.hour_to
    return res

Вот ссылка, как определить функциональные поля, Надеюсь, это поможет вам.

http://doc.openerp.com/trunk/developers/server/03_module_dev_02/

  • 0
    Спасибо за ваш ответ. это помогло мне решить некоторую часть проблемы, но я был новой ошибкой, когда я обновляю свои приложения, и я иду к представлению, у меня есть эта ошибка Ошибка Key error 9
  • 0
    Можете ли вы предоставить больше информации об этой ошибке?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню