如何从odoo中的下拉列表中保存数据

时间:2016-07-14 09:26:48

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

在我的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。

1 个答案:

答案 0 :(得分:1)

如果您需要与网页中的模型进行交互,您可能想要创建一个控制器,该控制器可以包含python代码并允许您的网页与模型交互(在您的模块内或跨Odoo)一般来说)。在一个简单的层面上,控制器可以进入你的模块主文件夹(即/mymodule/my_template_controller.py)并在你的init.py文件中声明(import 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,它实际上非常实用。