Установить и получить данные хранилища Odoo с помощью 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" />

Каждый раз, когда я выбираю значение для полей и нажимаю «Применить», создается новая запись вместо изменения первой, созданной, и никто не загружается при загрузке представления. Спасибо за чтение!


person Mariano DAngelo    schedule 12.02.2016    source источник


Ответы (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_param и get_param) - это просто простое хранилище значений ключей, встроенное в Odoo, которое позволяет хранить произвольные строки. Я использовал его в качестве примера, но на самом деле вы можете хранить настройки где угодно.

person Ludwik Trammer    schedule 12.02.2016
comment
спасибо Людвик! В вашем сообщении ludwiktrammer.github.io/odoo/custom-settings-odoo.html не упоминает conf.set_param и get_param И Odoo удача документации - person Mariano DAngelo; 12.02.2016
comment
ir.config_parameter (предоставляющий методы set_param и get_param) - это просто простое хранилище значений ключей, встроенное в Odoo, которое позволяет хранить произвольные строки. Я просто использовал это как пример, вы можете хранить настройки где угодно. - person Ludwik Trammer; 13.02.2016
comment
@Naveen age_verification.min_age - это просто произвольный ключ. Используйте все, что хотите. - person Ludwik Trammer; 03.04.2018