`KeyError: id` при запуске функции в OpenERP

Я пытаюсь запустить функцию при загрузке страницы на OpenERP7. Функция создает словарь, который я пытаюсь вернуть в свой элемент управления many2one.

Вот код моей функции.

class deg_form(osv.osv):

    _name = "product.product"
    _inherit = "product.product"  
    _columns = {
         'categ_temps':fields.many2one('product.category','Parent'),       
            }

    def myfunc_name(self,cr,uid,ids,context=None):
        domain=[]
        cr.execute('select id,name from product_category where parent_id is NULL')
        res=cr.fetchall()
        for pid,name in res:
            domain.append((pid))
            print name
            return {'domain':{'categ_temps':[('id','in',domain)]}}         

    _defaults = {'name':'.','categ_temps':myfunc_name}

deg_form()

Я пытаюсь запустить функцию из _defaults. в моей категории есть информация о поле, которое я хочу заполнить. Когда я пытаюсь загрузить свою страницу, я получаю эту ошибку:

select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)
KeyError: 'id'

Я попытался изменить свой return с domain на value. Я также пытался использовать функцию on_change. что дало мне требуемый результат, но после того, как я изменил раскрывающееся значение.

Я не уверен, что еще я должен сделать


person Saghir A. Khatri    schedule 19.05.2014    source источник


Ответы (1)


вы пытаетесь вернуть что-то для методов on_change (dict со значением, доменом или предупреждением), но вы не можете вернуть его таким образом для полей по умолчанию. как вы можете видеть в трассировке стека

select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)

фреймворк пытается получить int или, если это словарь, пытается получить значение для ключа 'id'. вы не предоставляете ни один из них. поскольку это поле «много2одно», ваша функция должна возвращать идентификатор записи таблицы, которую вы хотите использовать по умолчанию. поэтому верните простой идентификатор или словарь, например {'id':<here_your_id>}

надеюсь, это поможет вам

person CZoellner    schedule 19.05.2014
comment
Если вы можете уточнить, с некоторым кодом. Я попытался изменить свой словарь, чтобы получить id, но все равно получаю ту же ошибку. Также я не понимаю, у меня есть такой же фрагмент кода для onchange, но он работал. я ничего не изменил, поэтому он также должен возвращать идентификатор при первой загрузке страницы. - person Saghir A. Khatri; 19.05.2014
comment
хорошо, во-первых: вы не получите идентификаторы, используя функцию в _defaults (насколько я знаю, попробуйте отладить ее; РЕДАКТИРОВАТЬ: чтобы было ясно, я имею в виду идентификаторы параметров в вашей функции). и второе: вы не используете onchange здесь, поэтому вы не можете использовать поведение возврата onchange. функции, используемые в _defaults, должны возвращать одиночные идентификаторы (чистое целое число, не более того) или словарь, например {'id':‹your_id_here›}. - person CZoellner; 19.05.2014