如何在Odoo中创建无默认视图的简易网站(含序列号按钮)
解决Odoo自定义页面默认显示新建/搜索栏的问题
核心问题分析
你当前的配置会加载默认的tree视图(带搜索、新建按钮),且form视图未隐藏默认操作按钮,同时缺少生成序列号的核心逻辑。以下是针对性的修改方案:
1. 调整动作配置,直接打开单页Form视图
修改debit_card_actions.xml,去掉tree视图,设置为单页模式并隐藏默认按钮:
<record id="debit_card_action" model="ir.actions.act_window"> <field name="name">Kundenkarte</field> <field name="res_model">debit.card</field> <!-- 仅加载form视图 --> <field name="view_mode">form</field> <!-- 设置为单页弹窗模式,避免列表视图 --> <field name="target">new</field> <!-- 隐藏默认的创建/编辑按钮组 --> <field name="flags" eval="{'form': {'action_buttons': False}}"/> </record>
2. 修改Form视图,添加生成按钮与序列号展示
修正debit_card_view.xml,隐藏默认操作按钮,添加序列号显示区域和生成按钮:
<record model="ir.ui.view" id="debit_card_form_view"> <field name="name">debit.card.form.view</field> <!-- 修正模型名称拼写:debit_card → debit.card --> <field name="model">debit.card</field> <field name="arch" type="xml"> <!-- 关闭创建/编辑权限,隐藏默认按钮 --> <form string="Kundenkarte" create="false" edit="false"> <sheet> <div class="oe_title"> <h1>当前序列号: <field name="serial_number" readonly="1"/></h1> </div> <div class="oe_button_box"> <!-- 绑定生成序列号的模型方法 --> <button name="generate_serial_number" string="生成序列号" type="object" class="oe_highlight"/> </div> </sheet> </form> </field> </record>
3. 更新模型,添加序列号字段与生成逻辑
修正debit_card.py的拼写错误,补充字段和生成方法:
from odoo import fields, models import random import string class DebitCard(models.TransientModel): _name = "debit.card" # 修正拼写错误:_desctiption → _description _description = "Heinzmann debit card" serial_number = fields.Char(string="序列号", readonly=True) def generate_serial_number(self): # 生成10位随机大小写字母+数字的序列号,可按需修改规则 char_pool = string.ascii_uppercase + string.digits self.serial_number = ''.join(random.choice(char_pool) for _ in range(10)) # 刷新视图展示新序列号 return {'type': 'ir.actions.do_nothing'}
4. 修正权限配置(补充)
确保security/ir.model.access.csv给用户分配正确权限:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_debit_card,debit.card,model_debit_card,base.group_user,1,0,0,0
内容的提问来源于stack exchange,提问作者Taucher
相关产品推荐
相关产品推荐

