【问题标题】:How to save data from a drop-down list in odoo如何从odoo的下拉列表中保存数据
【发布时间】:2016-07-14 09:26:48
【问题描述】:

在我的 odoo 9 网站的一个页面中,我有一个下拉列表(在 xml 视图中使用 select 标签),如何保存用户选择的选项?

代码:

<select type="text" name="delivery_time" class="form-control" t-att-value="website_sale_order.delivery_time">
    <option value="1">8 AM - 10 AM</option>
    <option value="2">10 AM - 12 PM</option>
    <option value="3">12 PM - 2 PM</option>
    <option value="4">2 PM - 4 PM</option>
    <option value="5">4 PM - 6 PM</option>
</select

型号:

class odss_sale_order(models.Model):
    _inherit = "sale.order"

    delivery_time = fields.Char()

如您所见,我已经尝试在模型中做一些事情,所以它可以工作,但我似乎无法理解,知道为什么它不工作吗?

编辑:我正在寻找类似于this 的答案,但适用于 Odoo 而不是 PHP。

【问题讨论】:

  • 我知道有一个可接受的答案......但希望你知道有一个 fields.Selection 类型的字段。还是您想建立一个纯粹的网站?

标签: openerp html-select odoo-9 odoo-view odoo-website


【解决方案1】:

如果您需要与网页中的模型进行交互,您可能需要创建一个控制器,该控制器可以包含 Python 代码并允许您的网页与您的模型进行交互(通常在您的模块内或跨 Odoo )。在一个简单的层面上,控制器可以进入您的模块主文件夹(即 /mymodule/my_template_controller.py)并在您的 init.py 文件中声明(导入 my_template_controller)。然后,您可以在控制器中设置与您的模板 ID 匹配的路由,并在 XML 页面上创建发布到控制器的表单,从而允许运行 python 代码并保存或从模型中调用数据行。

具体来说,使用控制器中的 ORM 在模型中创建新行的代码首先是以下形式:

<openerp>
<data>
<template id="sales_order" name="Sales Order">
<t t-call="website.layout">
    <form action='/odss/sales_order/' method="POST" enctype="multipart/form-data">
    <select type="text" name="delivery_time" class="form-control">
        <option value="1">8 AM - 10 AM</option>
        <option value="2">10 AM - 12 PM</option>
        <option value="3">12 PM - 2 PM</option>
        <option value="4">2 PM - 4 PM</option>
        <option value="5">4 PM - 6 PM</option>
    </select>
    </form>
</t>
</template>
</data>
</openerp>

然后在你的控制器中(随便调用它并声明它init.py):

class SalesOrderController(http.Controller):
    @http.route('/odss/sales_order/', auth='user', website=True, csrf=False)
    def create_sales_order(self, delivery_time):

        odss_sales_order = http.request.env['sale.orders']
        new_so           = odss_sales_order.create({
                          'delivery_Time': delivery_time,
                           }) 

       return http.request.render('module_name.sales_order', {
    }) 

Odoo 确实有一些不错的文档来解释该过程。首先是如何设置网站,使用控制器作为视图和模型之间的中介:

http://www.odoo.com/documentation/9.0/howtos/website.html

第二个是如何使用所谓的对象关系模型 (ORM),它是 Odoo 特定的代码,允许从控制器调用数据并将数据保存到数据库。将控制器连接到您的网页后(通过路由),您可以将数据发布到表单上的路由并使用 ORM 将其保存到控制器中的数据库中:

https://www.odoo.com/documentation/9.0/reference/orm.html

Odoo 模块可以像任何其他模型/控制器/视图应用程序(例如 Ruby on Rails)一样构建,而且它实际上非常实用。

【讨论】:

  • 您的答案可能不正确,因为当我做同样的事情时我不需要控制器,但是对于另一个不是下拉列表的字段并且它有效。但是,如果您坚持我需要更改控制器中的某些内容,请编辑您的问题以包括我应该在控制器中执行的操作或将其作为评论。
  • 可能有一种方法可以直接发布到模型,但这是在您的问题中的 PHP 示例中使用 Odoo 完成的方式,这也是我在 Odoo 中保存表单数据的方式。使用 t-att-value 是使用 Odoos Qweb 模板语言,并且只有在控制器中生成这些值时才能调用这些值。 odoo.com/documentation/8.0/reference/qweb.html
  • 我应该在控制器中做什么?
  • 在答案中查看我最近的编辑,显示如何发布到路由,在控制器中声明路由,然后使用 ORM 获取数据(作为 Delivery_time 发送到控制器)并创建数据库中的新行。我不确定您的模块或模型的名称,所以我只是猜测,但这些区域必须与您的实际模型相匹配。
  • 我喜欢你的回答 Odoo 让我感到惊讶你能发布有用的链接如何创建网站并将数据从网页保存到模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多