Унаследовать TransientModel и иметь два представления ( website.config.settings)
Я пытаюсь унаследовать меню настроек сайта и у меня два представления. website.config.settings это модели.TransientModel
Когда я наследую это и просматриваю с новым пунктом меню, он перезаписывает предыдущий вид. Как - теперь есть два просмотра, новая запись, которую я определил, называется Настройки событий веб-сайта. Когда я нажимаю на него, он загружает новый измененный вид, но когда я нажимаю на существующее меню настроек, он ничего не показывает.
Таким образом, существующее меню настроек веб-сайта не работает, а новое меню работает. Мне нужны оба из них.
Код py и представление записи, которые я использовал, следующие:
class cofair_website_design_config(models.TransientModel):
_name = 'website.config.settings'
_inherit = 'website.config.settings'
event_title = fields.Char(related='website_id.event_title', string='Event Title')
XML:
<record id="view_website_event_config_settings" model="ir.ui.view">
<field name="name">Website Event Settings</field>
<field name="model">website.config.settings</field>
<field name="arch" type="xml">
<form class="oe_form_configuration">
<header>
<button string="Apply" type="object" name="execute" class="oe_highlight"/>
<button string="Cancel" type="object" name="cancel" class="oe_link"/>
</header>
<div>
<group string="Event Page Section">
<group>
<field name="event_title_color"/>
</group>
</group>
</div>
</form>
</field>
</record>
<record id="action_website_event_configuration" model="ir.actions.act_window">
<field name="name">Website Event Settings</field>
<field name="res_model">website.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="view_id" ref="view_website_event_config_settings"/>
</record>
<menuitem id="menu_website_event_settings" parent="website.menu_website_configuration" name="Website Event Settings" action="action_website_event_configuration"/>
2 ответа
Вместо переименования модулей (что вызывает реляционную ошибку), я нашел обходной путь. Я унаследовал основные настройки и поместил там идентификатор представления и вызвал его с помощью menuitem -
<!-- Bring settings menu out -->
<record id="website.action_website_configuration" model="ir.actions.act_window">
<field name="name">Website Settings</field>
<field name="res_model">website.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="view_id" ref="website.view_website_config_settings"/>
</record>
<menuitem id="website.menu_website_website_settings" parent="website.menu_website_configuration" name="Website Admin" action="website.action_website_configuration"/>
Затем я вызвал свое действие записи, и оно загрузило представление и действие. Другой момент заключается в том, что мне пришлось показать website_id, чтобы показать значения конкретных веб-сайтов, иначе временная модель всегда будет пустой.
Изменить _name
приписать определение вашей модели к чему-то другому, а также изменить xml соответствующим образом.
class cofair_website_design_config(models.TransientModel):
_name = 'something.else'
_inherit = 'website.config.settings'
event_title = fields.Char(related='website_id.event_title', string='Event Title')
ir.ui.view
<field name="model">something.else</field>
а также ir.actions.act_window
<field name="res_model">something.else</field>
Это должно скопировать все поля и методы из website.config.settings
к новой модели something.else
и держать его отдельно от website.config.settings