【问题标题】:Set and get store data Odoo with TransientModel使用 TransientModel 设置和获取存储数据 Odoo
【发布时间】:2016-05-23 20:29:23
【问题描述】:

我正在尝试将配置数据存储在 odoo 中,我需要存储 3 个对“account.journal”的引用。 模型在数据库中创建,视图显示在配置基本菜单中,当我按下应用按钮时数据存储在数据库中但是当我重新加载菜单时数据不显示

代码使用:

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" />

每次我为字段选择一个值并推送应用时,都会创建一条新记录,而不是修改第一个创建的记录,并且视图加载时不会加载任何人。 感谢阅读!

【问题讨论】:

    标签: configuration odoo odoo-8 odoo-view


    【解决方案1】:

    TransientModels 被设计为临时的,因此您可以获取值并随心所欲地使用它们。它们会定期从数据库中删除。

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

    • 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 中的一个简单的键值存储,可让您存储任意字符串。我以它为例,但实际上你可以在任何你喜欢的地方存储设置。

    【讨论】:

    • 感谢路德维克!在您的帖子ludwiktrammer.github.io/odoo/custom-settings-odoo.html 中没有提到 conf.set_param 和 get_param 以及 Odoo 文档的运气
    • ir.config_parameter(提供set_paramget_param 方法)只是Odoo 中内置的一个简单的键值对存储,可让您存储任意字符串。我只是以它为例,您可以将设置存储在任何您喜欢的地方。
    • @Naveen age_verification.min_age 只是一个任意键。使用任何你想要的。
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2018-11-29
    • 2010-12-01
    • 2018-10-15
    相关资源
    最近更新 更多