Many2one 与 inherit 区别

Many2one 与 inherit 区别

  1. qc_category.py中定义模型

from openerp import models, fields, api, exceptions

class QcCategory(models.Model):
_name = ‘qc.category’
_description = ‘Qc Category’

name = fields.Char(‘Name’, required=True, translate=True)
在这里插入图片描述

  1. qc_guangdian.py中调用Many2one
class QcGuangdianShouhou(models.Model):
_name = 'qc.guangdian.shouhou'
_description = 'Guangdian shouhou'
_inherit = ['mail.thread', 'ir.needaction_mixin']

parent_id = fields.Many2one(
    comodel_name='qc.category', string='不良明细', select=True)

在这里插入图片描述

一个表中的一个参数被反复引用,那么可以单独做成many2one 独立做成一个表单
Inherit为继承另一个表单中的参数

重点:

  1. 在__manifest__.py中找到depends,加上要继承的模块

  2. ir.actions.act_window,menu要放ir.ui.view下

  3. field name="inherit_id"类中 下面内容不能为空,可以直接应用视图,去掉。

  4. 继承部分代码

     <record id="product_template_only_form_view" model="ir.ui.view">
      <field name="name">product.template.product.form</field>
      <field name="model">product.template</field>
      <field name="mode">primary</field>
      <field name="priority" eval="8" />
      <field name="inherit_id ref="product.product_template_form_view"/>
      <field name="arch" type="xml">
    
    <record id="product_template_form_view" model="ir.ui.view">
        <field name="name">product.template.common.form</field>
        <field name="model">product.template</field>
        <field name="mode">prima
    

Ir_ui_view中
在这里插入图片描述
Ir_act_windows中
在这里插入图片描述
Ir_ui_menu中
在这里插入图片描述

        <record id="product_template_action" model="ir.actions.act_window">
        <field name="name">Products</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">product.template</field>
        <field name="view_mode">tree,form,kanban</field>
        <field name="view_type">form</field>
        <field name="view_id" ref="product_template_tree_view"/>   
        <field name="context">{"search_default_filter_to_sell":1}</field>
        </record>

二.

1.Quality_category/models/product_category.py中

from openerp import models, fields

class ProductCategory(models.Model):
_inherit = "product.category"

qc_triggers = fields.One2many(
    comodel_name="qc.trigger.product_category_line",
    inverse_name="product_category",
    string="Quality control triggers")

2.Product/product.py中

class product_category(osv.osv):
_name = "product.category"
_description = "Product Category"
_columns = {
    'name': fields.char('Name', required=True, translate=True, select=True),
    'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
    'parent_id': fields.many2one('product.category','Parent Category', select=True, ondelete='cascade'),
    'child_id': fields.one2many('product.category', 'parent_id', string='Child Categories'),
    'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of product categories."),
    'type': fields.selection([('view','View'), ('normal','Normal')], 'Category Type', help="A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure."),
    'parent_left': fields.integer('Left Parent', select=1),
    'parent_right': fields.integer('Right Parent', select=1),

}

3.qc_trigger_line.py中 qc.trigger.product_category_line

class QcTriggerProductCategoryLine(models.Model):
_inherit = "qc.trigger.line"
_name = "qc.trigger.product_category_line"

product_category = fields.Many2one(comodel_name="product.category")

def get_trigger_line_for_product(self, trigger, product, partner=False):
    trigger_lines = super(
        QcTriggerProductCategoryLine,
        self).get_trigger_line_for_product(trigger, product,
                                           partner=partner)
    category = product.categ_id
    while category:
        for trigger_line in category.qc_triggers.filtered(
                lambda r: r.trigger == trigger and (
                not r.partners or not partner or
                partner.commercial_partner_id in r.partners)):
            trigger_lines.add(trigger_line)
        category = category.parent_id
    return trigger_lines

  from openerp import models, fields


class QcTriggerLine(models.AbstractModel):
_name = "qc.trigger.line"
_description = "Abstract line for defining triggers"

trigger = fields.Many2one(comodel_name="qc.trigger", required=True)
test = fields.Many2one(comodel_name="qc.test", required=True)
user = fields.Many2one(
    comodel_name='res.users', string='Responsible',
    track_visibility='always', default=lambda self: self.env.user)
partners = fields.Many2many(
    comodel_name='res.partner', string='Partners',
    help='If filled, the test will only be created when the action is done'
    ' for one of the specified partners. If empty, the test will always be'
    ' created.', domain="[('parent_id', '=', False)]")

def get_trigger_line_for_product(self, trigger, product, partner=False):
    """Overridable method for getting trigger_line associated to a product.
    Each inherited model will complete this module to make the search by
    product, template or category.
    :param trigger: Trigger instance.
    :param product: Product instance.
    :return: Set of trigger_lines that matches to the given product and
    trigger.
    """
    return set()

4.qc_trigger.py中

class QcTrigger(models.Model):
_name = 'qc.trigger'
_description = 'Quality control trigger'

name = fields.Char(string='Name', required=True, select=True,
                   translate=True)
active = fields.Boolean(string='Active', default=True)
company_id = fields.Many2one(
    comodel_name='res.company', string='Company',
    default=lambda self: self.env['res.company']._company_default_get(
        'qc.test'))
partner_selectable = fields.Boolean(
    string='Selectable by partner', default=False, readonly=True,
    help='This technical field is to allow to filter by partner in'
    ' triggers')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值