Как отфильтровать только выбранные записи в поле Many2many из всех других записей модели в odoo13 с помощью фильтра домена

Я делаю модель упаковки, в которой можно создавать пакеты и использовать их в заказе на продажу, моя модель называется sale.package.

class Package(models.Model):
    _name = 'sale.package'
    _description = 'Package table'

    name = fields.Char(string='Name', required=True)
    width = fields.Float(string='Width')
    height = fields.Float(string='Height')
    length = fields.Float(string='Length')
    maximum_weight = fields.Float(string='Maximum weight')

Чтобы использовать его в форме заказа на продажу, я унаследовал модель sale.order и добавил поле Many2many в заказ на продажу, которое выбирает ранее сделанные пакеты, я также создал функцию Onchange, которая обновляет поле One2many на вновь созданной странице. в том же порядке продажи.

class SaleOrderPackage(models.Model):
    _inherit = 'sale.order'

    packs = fields.Many2many('sale.package', string='Package')
    package_lines = fields.One2many('sale.package.lines', 'line_name', string='Package Lines')

    @api.onchange('packs')
    def _onchange_packs(self):
        for rec in self:
            lines = [(5, 0, 0)]
            for line in self.packs:
                values = {
                    'name_on_line': line.name,
                    'line_width': line.width,
                    'line_height': line.height,
                    'line_length': line.length,
                    'line_maximum_weight': line.maximum_weight,
                }
                lines.append((0, 0, values))
            rec.package_lines = lines

До этого все идет нормально, мое новое требование - добавить умную кнопку в тот же заказ на продажу, и после ее нажатия должно появиться древовидное представление выбранных пакетов в заказе на продажу. Я добавил умную кнопку и определил функцию в файле python, которая возвращает не только выбранные, но и все пакеты, созданные с помощью модели.

    def selected_packages(self):
        print(self.packs)
        return {
            'name': 'Selected Packages',
            'domain': [],
            'view_type': 'form',
            'res_model': 'sale.package',
            'view_id': False,
            'view_mode': 'tree,form',
            'type': 'ir.actions.act_window'
        }

Поскольку у меня всего неделя в изучении Odoo, я не могу понять, как использовать фильтр домена в этом контексте, пожалуйста, помогите. Заранее спасибо.


person Vivi    schedule 30.05.2020    source источник
comment
Вы пробовали разместить этот вопрос на форуме Odoo? odoo.com/forum/help-1/tag/python- 86 / вопросы   -  person Mark Moretto    schedule 30.05.2020


Ответы (1)


Если вам нужно показать только выбранные пакеты, вам нужно просто отфильтровать записи по их идентификатору.

Для возврата используйте self.packs.ids список актуальных идентификаторов записей, соответствующих выбранным пакетам:

'domain': [('id', 'in', self.packs.ids)],
person Kenly    schedule 30.05.2020