2013-05-13 4 views
0

Мне нужно создать многое поле field.but, но ему нужно будет фильтровать данные по моей логике в функции. Как это реализовать в OpenERP ver 7?OpenERP many2one поле с функцией

я попытался с ниже code.but его не дают нагрузку list.just как только для чтения поле:

def _get_users(self, cr, uid, ids, field_name, arg, context=None): 
    res = {} 
    users_list=[] 
    officer_ids = self.search(cr, uid , 'bpl.officer', [('is_user', '=', True)]) 
    officer_obj = self.browse(cr, uid, officer_ids, context=context) 
    for record in officer_obj: 
     users_list.append(record.user_id.id) 
    user_obj = self.pool.get('res.users') 
    for data in self.browse(cr, uid, ids, context=context): 
     res[data.id] = users_list 
    return res 

_name = "bpl.officer" 
_description = "Officer registration details" 
_columns = { 
    'bpl_company_id':fields.many2one('res.company', 'Company', help='Company'), 
    'bpl_estate_id':fields.many2one('bpl.estate.n.registration', 'Estate', help='Estate', domain="[('company_id', '=', bpl_company_id)]"), 
    'bpl_division_id':fields.many2one('bpl.division.n.registration', 'Division', help='Division', domain="[('estate_id','=',bpl_estate_id)]"), 
    'name': fields.char('Name', size=128, required=True), 
    'is_user': fields.boolean('Is User', help="Is System user or not"), 
    'user_id': fields.function(_get_users, type="many2one",relation="res.users"), 

ответ

5

Прежде всего функционального поля вы создали is wrong.user_id - это функциональное поле, в котором вы используете какую-то магию (я не понимаю). Измените его на поле many2one.

Если вы хотите отфильтровать некоторые записи, вы можете добавить фильтр домена в свой XML-файл, где вы добавите поле user_id. например <field name="user_id" domain="[('is_user', '=', True)]"/> if is_user - это поле в таблице res_partner. В противном случае вы можете преодолеть функцию fields_view_get и добавить домен оттуда.

+1

Это должно быть полезно, если is_user определяется в объект res.users. Согласно источнику, он определяется как объект bpl.officer. –

+0

yep AnomA. нужно также фильтровать записи по сравнению с полями других классов. Затем как реализовать это.? –

+0

http://stackoverflow.com/questions/6569828/how-to-create-a-dynamic-view-on-openerp, пожалуйста, проверьте ответ на этот пост. – OmaL

1

Первое, сделать user_id поле many2one с res.users.

Вы можете добавить контекст и переопределить метод поиска на основе этого контекста объекта res.users и вернуть свои записи в соответствии с вашей логикой.

Поскольку нет никакого способа, чтобы добавить прямой домен, я думаю, что Вам нужно переопределить метод поиска по res.users на основе контекста, как это:

def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): 
     if context is None: 
      context = {} 
     users_list = [] 
     if context.get('test') == 'test': 
      officer_ids = OFFICE_OBJ.search(cr, uid , [('is_user', '=', True)]) 
      officer_obj = OFFICE_OBJ.browse(cr, uid, officer_ids, context=context) 
      for record in officer_obj: 
       users_list.append(record.user_id.id) 
       return users_list 
     return super(res_users, self).search(cr, uid, args, offset, limit, 
       order, context=context, count=count) 
+0

этот вариант является лучшим решением для этого – senthilnathang

+0

Привет @Priyesh Solanki, можете ли вы рассказать мне, как я получу контактное лицо компании в многопользовательском поле или любым другим способом, чтобы получить его в моей пользовательской форме, помогите мне –

Смежные вопросы