简体   繁体   English

Odoo-15。 如何禁用记录删除(布尔字段)?

[英]Odoo-15. How to disable record deletion (bool field)?

I made all the other entries false if one entry is true.如果一个条目为真,我将所有其他条目设为假。 How do I protect this entry from being deleted?如何保护此条目不被删除? There must always be at least one entry.必须始终至少有一个条目。

res.partner.xml res.partner.xml

<odoo>


    <record id="view_partner_form_inherit" model="ir.ui.view">
        <field name="name">res.partner.form</field>
        <field name="model">res.partner</field>
        <field name="inherit_id" ref="base.view_partner_form"/>
        <field name="arch" type="xml">

            <xpath expr="//form/sheet/group/group/field[@name='mobile']" position="after">
                <field name="is_primary" string='Is primary'/>
            </xpath>

            <div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '') + ' oe_kanban_global_click'">
            <div style="float: right; margin-top:-25%;">
                <xpath expr="//div[hasclass('oe_kanban_details')]" position="inside">
                    <field name="is_primary" widget="checkbox"/>
                </xpath>
            </div>
        </div>
        </field>

    </record>


</odoo>

Primary_contact.py Primary_contact.py

from odoo import api, fields, models, _从 odoo 导入 api,字段,模型,_

class PartnerPrimary(models.Model):
    _inherit = "res.partner"
    is_primary = fields.Boolean(string='Is primary')

@api.constrains('is_primary')
def check_is_primary(self):
    if self.is_primary:
        contacts_ids = self.parent_id.child_ids.filtered(lambda lm: lm.id != self.id)
        for cont in contacts_ids:
            cont.is_primary = False

I solved this problem我解决了这个问题

class PartnerPrimary(models.Model):
    _inherit = "res.partner"
    is_primary = fields.Boolean(string='Is primary')

    @api.constrains('is_primary')
    def check_is_primary(self):
        if self.is_primary:
            contacts_ids = self.parent_id.child_ids.filtered(lambda lm: lm.id != self.id)
            for cont in contacts_ids:
                cont.is_primary = False


    def unlink(self):
        for delete in self:
            if delete.is_primary:
                raise UserError(('You cannot delete'))
            return super(PartnerPrimary, self).unlink()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM