gpt4 book ai didi

python - 从 Web Controller Odoo v8 更新模型

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:50 26 4
gpt4 key购买 nike

我有这个 Controller :

@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 上创建了一条新记录,我想从此模型更新记录而不是创建新记录,我该如何实现这一点?

我真的被这个问题困住了。

我需要从后端的表单 View 加载此 Web 表单,并将更新附加到此表单 View 。

例如,我使用按钮加载此表单,从后端的 x 表单 View 加载此 Web 表单,其中包含要更新的字段,然后保存并将其保存在我正在浏览的特定表单 View 上。

如果这听起来有点菜鸟,我很抱歉,但我是 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>

我还是很困惑,:(

最佳答案

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

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

这里,如果GET也会在隐藏字段中呈现模型的id

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

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

最终渲染更新后的数据(与GET的情况相同)

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

关于python - 从 Web Controller Odoo v8 更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37535903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com