使用TransientModel设置并获取商店数据Odoo

时间:2016-02-12 15:55:03

标签: configuration openerp odoo-8 odoo-view

我试图将配置数据存储在odoo中,我需要存储3个引用“account.journal”#39;。 模型在数据库中创建,视图显示在配置基础菜单中,当我按下APPLY按钮时数据存储在数据库中但是当我重新加载菜单时数据未显示

代码使用:

from openerp import fields, models, osv, api, _

class Configuration(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'transporte_carta_de_porte.config.settings'

    ft_mercaderia = fields.Many2one(
        'account.journal',string='Debito ft mercaderia',
        help="Diario de ajuste al transportista por faltante de mercaderia")
    ade_transportista = fields.Many2one(
        'account.journal',string='Debito por adelanto transportista',
        help="Diario de debito al transportista por faltante de adelanto")
    ade_proveedor = fields.Many2one(
        'account.journal',string='Debito por adelanto proveedor',
        help="Diario de debito por adelanto en la cuenta del proveedor de combustible",)

布局

<record id="view_tcp_config_settings" model="ir.ui.view">
            <field name="name">TCP settings</field>
            <field name="model">transporte_carta_de_porte.config.settings</field>
            <field name="arch" type="xml">
                <form string="TCP settings"
                      class="oe_form_configuration">
                    <sheet>
                        <div>
                            <button string="Apply" type="object" name="execute" class="oe_highlight" />
                            or
                            <button string="Cancel" type="object" name="cancel" class="oe_link" />
                        </div>
                        <group string="Journals Settings">
                            <field name="ft_mercaderia" />
                            <field name="ade_transportista" />
                            <field name="ade_proveedor" />
                        </group>
                    </sheet>
                </form>
            </field>
        </record>

        <record id="action_tcp_configuration" model="ir.actions.act_window">
            <field name="name">TCP Configuration</field>
            <field name="res_model">transporte_carta_de_porte.config.settings</field>
            <field name="priority" eval="50" />
            <field name="view_mode">form</field>
            <field name="target">inline</field>
        </record>

        <menuitem id="menu_tcp_config" name="TCP Settings" parent="base.menu_config" action="action_tcp_configuration" />

每次我为字段选择一个值并按下Apply时,会创建一个新记录,但是修改了第一个创建的记录,并且没有人在视图加载时加载。 谢谢你的阅读!

1 个答案:

答案 0 :(得分:7)

TransientModel被设计为临时的,这样你就可以获得价值并随心所欲地使用它们。它们会定期从数据库中删除。

您需要实施自己的方法来保存这些设置。您需要实现(至少)两种方法:

  • set_foo(其中foo是一个任意字符串)用于保存值。
  • get_default_foo(其中foo再次是一个任意字符串)用于获取保存的值(用于在配置用户界面中显示它们)

一个简单的例子:

class AgeLimitSetting(models.TransientModel):
    _inherit = 'res.config.settings'

    min_age = fields.Integer(
        string=u"Age limit",
    )

    @api.model
    def get_default_age_values(self, fields):
        conf = self.env['ir.config_parameter']
        return {
            'min_age': int(conf.get_param('age_verification.min_age')),
        }

    @api.one
    def set_age_values(self):
        conf = self.env['ir.config_parameter']
        conf.set_param('age_verification.min_age', str(self.min_age))

ir.config_parameter(提供set_paramget_param方法)只是一个内置于Odoo中的简单键值存储,可以存储任意字符串。我用它作为一个例子,但实际上你可以在任何你喜欢的地方存储设置。