簡體   English   中英

ODOO-如何過濾包含零項目的Many2Many字段

[英]ODOO - How to filter Many2Many field containing zero items

如何過濾Odoo Many2Many字段包含零個項目。

示例:我正在嘗試篩選具有0個關注者的任務(message_follower_ids)。

[['message_follower_ids','=',False]]不返回任何結果,但是應該有很多結果。

Odoo版本:8.0

坦率

message_follower_ids是一個計算字段。

如果要按任何計算字段進行搜索,則必須在舊api中編寫它的搜索方法,即fnct_search,然后可以返回domain。

在您的情況下,message_follower_ids是一個計算對象,還具有fnct_search方法。 因此,只要您在右上角的搜索欄中搜索關注者,該方法就會調用並返回域,您將獲得過濾列表。

但是在那fnct_search中,您需要進行更改以實現您的需求。

像這樣。

class mail_thread(osv.AbstractModel):
    _inherit = 'mail.thread'    

    def _get_followers(self, cr, uid, ids, name, arg, context=None):
        fol_obj = self.pool.get('mail.followers')
        fol_ids = fol_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('res_id', 'in', ids)])
        res = dict((id, dict(message_follower_ids=[], message_is_follower=False)) for id in ids)
        user_pid = self.pool.get('res.users').read(cr, uid, [uid], ['partner_id'], context=context)[0]['partner_id'][0]
        for fol in fol_obj.browse(cr, SUPERUSER_ID, fol_ids):
            res[fol.res_id]['message_follower_ids'].append(fol.partner_id.id)
            if fol.partner_id.id == user_pid:
                res[fol.res_id]['message_is_follower'] = True
        return res

    def _search_followers(self, cr, uid, obj, name, args, context):
        """Search function for message_follower_ids

        Do not use with operator 'not in'. Use instead message_is_followers
        """
        fol_obj = self.pool.get('mail.followers')
        res = []
        for field, operator, value in args:
            assert field == name
            # TOFIX make it work with not in
            assert operator != "not in", "Do not search message_follower_ids with 'not in'"
            fol_ids = fol_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('partner_id', operator, value)])
            if not fol_ids and operator == '=' and value==False:
                fol_ids = fol_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('partner_id', '!=', value)])
                res_ids = [fol.res_id for fol in fol_obj.browse(cr, SUPERUSER_ID, fol_ids)]
                res.append(('id', 'not in', res_ids))
            else:
                res_ids = [fol.res_id for fol in fol_obj.browse(cr, SUPERUSER_ID, fol_ids)]
                res.append(('id', 'in', res_ids))
        return res

    _columns = {
        'message_follower_ids': fields.function(_get_followers,fnct_search=_search_followers),
    }

還需要在依賴列表中添加郵件模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM