2017-02-16 17 views
0

Я пытаюсь использовать фильтр по набору записей, но в conslole получаю только res.partner() пустым.Отфильтрованная операция в odoo9

Как получить все записи из res.partner, где ID = company_id

@api.multi 
def get_partner(self): 
    my_ids = self.env['res.partner'].filtered(lambda r: r.id == r.company_id) 
    print(my_ids) 

ответ

1

Это, вероятно, потому, что ваш фильтр фактически отфильтровываются все записи. Значит, ни одна запись в наборе не соответствовала вашим критериям.

Вы запрос r.id == r.company_id говорит

find all partners whose id is equal to the company id 

Поэтому в основном вам нужно изменить лямбда-выражения к чему-то, что обеспечит нужный список. Если вы хотите, чтобы все партнеры, входящие в состав текущей пользовательской компании, запрос выглядел бы так.

company_id = self.env.user.company_id.id 
my_ids = self.env['res.partner'].search([]).filtered(lambda r: r.company_id.id == company_id) 
+0

Здравствуйте Филипп, вот скриншот https://postimg.org/image/vmqv6uexn/ – Pointer

+0

К сожалению, только что понял. Фильтр фильтрует только существующий набор записей. Сначала вам нужно выполнить поиск, а затем фильтр. Я обновил свой ответ. –

+0

Phillip Stock Теперь работаем, но зачем использовать фильтр, когда с помощью этого кода my_ids = self.env ['res.partner']. Search ([('company_id', '=', company_id)]) получить некоторый результат. Я не понимаю, почему и где используется фильтрация? – Pointer

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

  • Нет связанных вопросов^_^