как решить ошибку KeyError: 'employee_id' - PullRequest
0 голосов
/ 04 апреля 2019

Я использую odoo 8, и я разработал пользовательский модуль для биометрического устройства, и он показывает ошибку userHasUserDevice = biometric_user_obj.search ([('employee_id', '=', int (values ​​['employee_id'])), KeyError: 'employee_id' Я пытался исправить проблему, но она всегда отображала одну и ту же проблему. Любая идея, пожалуйста, помогите?

Traceback

Traceback (most recent call last):
 File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\http.py", line 544, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\http.py", line 581, in dispatch
result = self._call_function(**self.params)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\http.py", line 317, in _call_function
return checked_call(self.db, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\service\model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\http.py", line 314, in checked_call
return self.endpoint(*a, **kw)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\http.py", line 810, in __call__
return self.method(*args, **kw)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\http.py", line 410, in response_wrap
response = f(*args, **kw)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\web\controllers\main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\web\controllers\main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\hr_biometric_machine\models\biometric_data_wizard.py", line 22, in import_attendance
biometric_attendance.crate_attendance_in_openep()
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\hr_biometric_machine\models\biometric_data_wizard.py", line 36, in crate_attendance_in_openep
biometric_machine, biometric_data_obj, biometric_user_obj,)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\hr_biometric_machine\models\biometric_data.py", line 145, in import_data_classmethod
attendances = biometric_machine.getattendance()
File "C:\Python2.7.13\lib\site-packages\mock.py", line 1201, in patched
return func(*args, **keywargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\hr_biometric_machine\models\biometric_machine.py", line 136, in getattendance
self.create_user()
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\hr_biometric_machine\models\biometric_machine.py", line 119, in create_user
'biometric_device': self.id, }
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "D:\odoo_8.0.20170129\odoo-8.0-20170129\openerp\addons\hr_biometric_machine\models\biometric_user.py", line 33, in create
userHasUserDevice = biometric_user_obj.search([('employee_id', '=', int(values['employee_id'])),
KeyError: 'employee_id'

biometric_user.py

class BiometricUser(models.Model):
_name = 'biometric.user'

biometric_id = fields.Integer('Id in biometric device')
name = fields.Char('Name in biometric device')
employee_id = fields.Many2one('hr.employee', 'Related employee')
biometric_device = fields.Many2one(
    'biometric.machine', 'Biometric device', )
 @api.model
    def create(self, values):
    userExist = None
    biometric_machine_obj = self.env['biometric.machine']
    biometric_user_obj = self.env['biometric.user']
    userExist = biometric_user_obj.search([('biometric_id', '=', int(values['biometric_id'])),
                                           ('biometric_device', '=', int(values['biometric_device']))])
    userHasUserDevice = biometric_user_obj.search([('employee_id', '=', int(values['employee_id'])),
                                                    ('biometric_device', '=', int(values['biometric_device']))])
    print(len(userExist))
    if len(userExist) != 0:
        raise Warning(_('User exist in ZK machine'))
    else:
        if len(userHasUserDevice) != 0:
            raise Warning(_('Every employee doesn\'t have more than one user in  a specific biometric device !'))
        else:
            openerp_machine = biometric_machine_obj.search([('id', '=', values['biometric_device']), ], )
            print ("openerp_machine:", openerp_machine['ip_address'])
            print ("biometric_device:", values['biometric_device'])
            conn = None
            zk = ZK(str(openerp_machine['ip_address']), port=int(openerp_machine['port']), timeout=5)
            try:
                print 'Connecting to device ...'
                conn = zk.connect()
                print 'Disabling device ...'
                conn.disable_device()
                conn.set_user(uid=int(str(values['biometric_id'])), name=str(values['name']),
                              privilege=const.USER_DEFAULT, password='', group_id='',
                              user_id=str(values['biometric_id']))
                print 'Enabling device ...'
                conn.enable_device()
                res_id = super(BiometricUser, self).create(values)
            except Exception, e:
                print "Process terminate : {}".format(e)
                raise Warning(_('Something bad happened. ' + str(e)))
            finally:
                if conn:
                    conn.disconnect()
    return res_id

1 Ответ

0 голосов
/ 12 апреля 2019

Проверьте values метода create (), employee_id недоступен, и вы пытаетесь получить employee_id из values.

Вы должны убедиться, что employee_id доступен в значениях или нет, как показано ниже:

if 'employee_id' in values :
    userHasUserDevice = biometric_user_obj.search([('employee_id', '=', int(values['employee_id'])),
                                                    ('biometric_device', '=', int(values['biometric_device']))])
...