from odoo import models, fields, api class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' # ✅ CRITICAL FIX: Use Many2one to link to the singleton # This is the ONLY field the settings wizard needs to save explicitly khmer_theme_config_id = fields.Many2one( 'custom.theme.config', string='Theme Configuration', required=True, default=lambda self: self._get_default_theme_config() ) # ✅ Related Fields (Read/Write via the Many2one) # These will automatically update the linked record when the Many2one is saved khmer_font_file = fields.Binary( string="Custom Font File (.ttf)", related='khmer_theme_config_id.font_file', readonly=False ) khmer_font_name = fields.Char( string="Font Family Name", related='khmer_theme_config_id.font_name', readonly=False ) khmer_menu_bg_color = fields.Char( string="Menu Background Color", related='khmer_theme_config_id.menu_bg_color', readonly=False ) khmer_menu_bg_image = fields.Binary( string="Menu Background Image", related='khmer_theme_config_id.menu_bg_image', readonly=False ) khmer_is_responsive = fields.Boolean( string="Enable Mobile Responsiveness", related='khmer_theme_config_id.is_responsive', readonly=False ) khmer_font_file_name = fields.Char(string="Font Filename", related='khmer_theme_config_id.font_file_name', readonly=False) @api.model def _get_default_theme_config(self): config = self.env['custom.theme.config'].search([], limit=1) if not config: config = self.env['custom.theme.config'].create({'name': 'Main Configuration'}) return config.id