使用 TransientModel 设置和获取存储数据 Odoo
Set and get store data Odoo with TransientModel
我试图在 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" />
每次我为字段选择一个值并推送应用时,都会创建一条新记录而不是修改第一个创建的记录,并且没有人加载视图加载。
感谢阅读!
TransientModel
s 被设计为临时的,这样您就可以获取值并随心所欲地使用它们。它们会定期从数据库中删除。
您需要实现自己的方法来保存这些设置。您需要(至少)实现两种方法:
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_param
和 get_param
方法)只是 Odoo 内置的一个简单的键值存储,可让您存储任意字符串。我以它为例,但实际上您可以将设置存储在任何您喜欢的地方。
我试图在 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" />
每次我为字段选择一个值并推送应用时,都会创建一条新记录而不是修改第一个创建的记录,并且没有人加载视图加载。 感谢阅读!
TransientModel
s 被设计为临时的,这样您就可以获取值并随心所欲地使用它们。它们会定期从数据库中删除。
您需要实现自己的方法来保存这些设置。您需要(至少)实现两种方法:
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_param
和 get_param
方法)只是 Odoo 内置的一个简单的键值存储,可让您存储任意字符串。我以它为例,但实际上您可以将设置存储在任何您喜欢的地方。