从网络控制器 Odoo v8 更新模型



我有这个控制器:

@route('/contrato/crear/', type='http', auth='public',website=True)
def create(self, **post_data):
    form = CuidumForm(request.httprequest.form)
    form.partner_id.choices = [
        (partner.id, partner.name)
        for partner in request.env['res.partner'].search([])
    ]
    if request.httprequest.method == 'POST' and form.validate():
        request.env['account.periodical_invoicing.agreement'].create(dict([
            (field_name, field.data)
            for field_name, field in form._fields.iteritems()
        ]))
        return request.render(
            'website_create_partner.success',
            {'name': form.name.data})
    return request.render(
        'website_create_partner.contrato_new',
        {'form': form})

然后这个表格来自WTForms

class CuidumForm(Form):
    name = StringField(_('Nombre periodical'),
        [Required(_('Please enter a name for the invoicing'))])
    nombre = StringField(_('Nombre'),
        [Required(_('Please enter a name for the Partner'))])
    n_seguridad_social = StringField(_('N de Seguridad Social'))#, [
    fecha_nacimiento = DateField(_('Fecha de nacimiento'), format='%d/%m/%Y', validators=(validators.Optional(),) )
    grado_discapacidad = StringField(_('Grado de discapacidad'))
    partner_id = SelectField(_('Country'), coerce=int)

这个逻辑,实际上在account.periodical_invoicing.agreement上创建了一个新记录,现在我想从这个模型中更新记录而不是创建新记录,我该如何实现?

我真的被困在了这个上。

我需要从后端的窗体视图加载此 Web 窗体,并将更新附加到此窗体视图。

例如,我用一个按钮加载它,从后端的 x 表单视图,它加载这个 Web 表单,其中包含要更新的字段,然后保存并将其保存在我正在浏览的特定表单视图中。

如果这听起来很菜鸟,我很抱歉,但我是 Odoo v8 API 的新手,我对这个感到非常困惑。

有什么想法吗?

非常感谢。

编辑

我这样做,但它仍然创造了一个新记录:

@route('/contrato/editar/', type='http', auth='public',website=True)
def edit(self, **post_data):
    form = CuidumForm(request.httprequest.form)
    form.partner_id.choices = [
        (partner.id, partner.name)
        for partner in request.env['res.partner'].search([])
    ]
    if request.httprequest.method == 'GET' and form.validate():
        request.env['account.periodical_invoicing.agreement'].update(dict([
            (field_name, field.data)
            for field_name, field in form._fields.iteritems()
        ]))
        return request.render(
            'website_create_partner.success',
            {'name': form.name.data})
    return request.render(
        'website_create_partner.contrato_editar',
        {'form': form})

在我的 xml 中:

<template id="contrato_editar" name="Edicion">
<t t-call="website.layout">
    <div class="row">
        <div class="col-md-6 col-md-offset-2">
            <form role="form" action="/contrato/editar" method="GET">
                <t t-foreach="form" t-as="field">
                    <t t-call="website_create_partner.field_render_cuidum" />
                </t>
                <button type="submit" class="btn btn-primary mt8">Guardar</button>
            </form>
        </div>
    </div>
</t>
</template>

我仍然很困惑,:(

创建一个新的 url 处理程序 /contrato/update/

 @route('/contrato/update/', type='http', auth='public',website=True)

GET的情况下,还在隐藏字段中呈现模型的id

POST(update)时,首先浏览记录,然后使用post数据执行写入,如下所示:

  obj = request.env['account.periodical_invoicing.agreement'].browse( post.get(id))
  obj.write(post)

最后呈现更新的数据(与 GET 的情况相同)

希望对您的情况有所帮助/

最新更新