Как сохранить более одной записи в поле One2many в веб-форме в odoo 12 - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть веб-форма с более чем одним полем выбора, которое принимает различные значения. Как мне сохранить их в поле one2many в веб-контроллере?

Вот скриншот того, что я пытаюсь сделатьдостижения

enter image description here

Я хочу иметь возможность хранить те записи, которые пользователь заполняет в поле store_line

class CreateRequest(models.Model):
    _name = 'store.request'
    _inherit = 'mail.thread'

    reference = fields.Char(default=lambda self: _('New'),)
    request_date = fields.Date()
    approve_date = fields.Date()
    refuse_request = fields.Char()
    amount_transfers = fields.Integer(compute='_compute_count_transfers')
    amount_rfq = fields.Integer(compute='_compute_count_rfq')
    transfered = fields.Boolean(default=False)
    rfq = fields.Boolean(default=False)
    section = fields.Many2one('hr.employee.category', domain=[('display_req',
                                                               '=', True)])
    # request_by = fields.Many2one('hr.employee', related='section.category_ids')
    request_by = fields.Many2one('hr.employee', domain=[('category_ids', '=', 'section')])
    store_line = fields.One2many('store.request.line', 'number',
                                 string='Store Request', copy=True,
                                 index=True)

Этомой веб-контроллер

@http.route('/page/store_submit_form', auth='user', website=True)
    def submit_form(self, **kw):
        logging.info(kw)

        # i = 0
        # for key in kw:
        #     i
        #     logging.info(key)
        #     logging.info(kw[key])

        section = kw['section']
        employee_id = kw['requested_by']
        date = kw['date']
        product_id = kw['product']
        logging.info(product_id)
        description = kw['desc']
        quantity = kw['quantity']
        uom_id = kw['uom']
        lines = [(0, 0, {
            'name': int(product_id),
            'description': description,
            'quantity': int(quantity),
            'unit_of_quantity': uom_id
        })]
        exp_sheet_model = http.request.env['store.request']
        date = datetime.strptime(date, '%Y-%m-%d %H:%M:%S').date()
        data = {
            'section': section,
            'request_by': employee_id,
            'request_date': date,
            'is_webform': True,
            'store_line': lines,
            'state': 'draft'
        }
        logging.info(data)
        exp_sheet_model.sudo().create(data)

Я получаю значения в переменной строк

1 Ответ

0 голосов
/ 03 ноября 2019

Вы можете использовать то же имя для дополнительных полей ввода в форме, скажем, product, description, quantity и uom. Из контроллера POST вы можете получить список выбранного значения, используя следующий метод getlist.

products = request.httprequest.form.getlist('product')
descriptions = request.httprequest.form.getlist('description')
quantities = request.httprequest.form.getlist('quantity')
uoms = request.httprequest.form.getlist('uom')

Используйте встроенный Python zip, чтобы сгенерировать объединенные кортежи и пройти по нему:

lines = [(0, 0, {
            'name': int(product),
            'description': description,
            'quantity': int(quantity),
            'unit_of_quantity': int(uom)
        }) for product, description, quantity, uom in zip(products, descriptions, quantities, uoms)]

Для получения дополнительной информации посетите Официальная документация wrekzeug .

...