首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使satusbar仅对特定状态可裁剪(Odoo13)

在Odoo13中,可以通过自定义模块来实现使satusbar仅对特定状态可裁剪的功能。以下是一种实现方式:

  1. 创建一个自定义模块,命名为"custom_module"(可以根据实际需求自定义模块名称)。
  2. 在custom_module中创建一个新的Python文件,命名为"models.py",并在文件中定义一个新的模型,例如"CustomModel"。
代码语言:txt
复制
from odoo import models, fields

class CustomModel(models.Model):
    _name = 'custom.model'
    _description = 'Custom Model'

    name = fields.Char(string='Name')
    status = fields.Selection([
        ('draft', 'Draft'),
        ('confirmed', 'Confirmed'),
        ('done', 'Done')
    ], string='Status', default='draft')
  1. 在custom_module中创建一个新的XML文件,命名为"views.xml",并在文件中定义一个新的视图,例如"custom_model_form_view"。
代码语言:txt
复制
<odoo>
    <data>
        <record model="ir.ui.view" id="custom_model_form_view">
            <field name="name">custom.model.form.view</field>
            <field name="model">custom.model</field>
            <field name="arch" type="xml">
                <form>
                    <header>
                        <button name="%(action_confirm)d" string="Confirm" states="draft" class="oe_highlight"/>
                        <button name="%(action_done)d" string="Done" states="confirmed" class="oe_highlight"/>
                    </header>
                    <sheet>
                        <!-- Your fields here -->
                    </sheet>
                </form>
            </field>
        </record>
    </data>
</odoo>
  1. 在custom_module中创建一个新的Python文件,命名为"controllers.py",并在文件中定义一个新的控制器,例如"CustomController"。
代码语言:txt
复制
from odoo import http
from odoo.http import request

class CustomController(http.Controller):
    @http.route('/custom/model/<int:model_id>/confirm', type='json', auth='user')
    def action_confirm(self, model_id):
        model = request.env['custom.model'].browse(model_id)
        model.write({'status': 'confirmed'})
        return True

    @http.route('/custom/model/<int:model_id>/done', type='json', auth='user')
    def action_done(self, model_id):
        model = request.env['custom.model'].browse(model_id)
        model.write({'status': 'done'})
        return True
  1. 在custom_module中创建一个新的XML文件,命名为"security.xml",并在文件中定义一个新的安全规则,例如"custom_model_security_rule"。
代码语言:txt
复制
<odoo>
    <data>
        <record id="custom_model_security_rule" model="ir.rule">
            <field name="name">Custom Model Security Rule</field>
            <field name="model_id" ref="model_custom_model"/>
            <field name="domain_force">[('status', 'in', ['draft', 'confirmed'])]</field>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="True"/>
            <field name="perm_create" eval="True"/>
            <field name="perm_unlink" eval="True"/>
        </record>
    </data>
</odoo>
  1. 在custom_module中创建一个新的XML文件,命名为"manifest.py",并在文件中定义模块的元数据。
代码语言:txt
复制
{
    'name': 'Custom Module',
    'version': '1.0',
    'summary': 'Custom Module Summary',
    'description': 'Custom Module Description',
    'author': 'Your Name',
    'depends': ['base'],
    'data': [
        'security.xml',
        'views.xml',
    ],
    'demo': [],
    'installable': True,
    'application': True,
}
  1. 将custom_module文件夹放置在Odoo的addons目录下,并重新启动Odoo服务。
  2. 在Odoo中安装并启用"Custom Module"。
  3. 现在,当您在Odoo中创建或编辑"Custom Model"记录时,您将看到一个状态栏(status bar)显示为草稿(draft)状态。只有在草稿状态下,您才能看到"Confirm"按钮。当您点击"Confirm"按钮时,状态将更改为"Confirmed",并且"Done"按钮将显示出来。同样,只有在"Confirmed"状态下,您才能看到"Done"按钮。

这样,您就可以使status bar仅对特定状态可裁剪,并根据状态的变化显示或隐藏相关按钮。请注意,以上示例中的代码仅供参考,您可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券