首页 > 解决方案 > 在 Odoo 13 的另一个模型中使用选择字段

问题描述

我完全是一个非常喜欢 Odoo 的新手 :)

我在 Odoo CE 13 中被这个问题困扰了几天。

我希望我在sale.order中制作的 SHIPPING TYPE 字段也可以在purchase.order中使用。

所以我在shipping_type.py中做了这个

  # -*- coding: utf-8 -*-
    from odoo import models, fields
    
    class SaleOrder(models.Model):
        _inherit = 'sale.order'
    
        shipping_selection = [
                    ('type1', 'Instant'),
                    ('type2', 'Same Day'),
                    ('type3', 'JNE'),
                    ('type4', 'Tokopedia'),
                    ('type5', 'Pick Up'),
                    ('type6', 'AnterAja-Reguler'),
                    ('type7', 'J&T-Reguler'),
                    ('type8', 'Ninja-Reguler'),
    
                     ]
    
        shipping_type = fields.Selection(shipping_selection,'Shipping Type',)

然后,我试图在另一个插件中制作purchase_shipping_type.py ,并创建了这个:

# -*- coding: utf-8 -*-
from odoo import models, fields

class SaleOrder(models.Model):
    _inherit = ['sale.order']

    shipping_selection = [
                ('type1', 'Instant'),
                ('type2', 'Same Day'),
                ('type3', 'JNE'),
                ('type4', 'Tokopedia'),
                ('type5', 'Pick Up'),
                ('type6', 'AnterAja-Reguler'),
                ('type7', 'J&T-Reguler'),
                ('type8', 'Ninja-Reguler'),

                 ]

    shipping_type = fields.Selection(shipping_selection,'Shipping Type',)

class PurchaseOrder(models.Model):
    _inherit = ['purchase.order']

   shipping_type_purchase = fields.Selection(string='Shipping Type',related=shipping_type.shipping_type_purhase, readonly=True)

出现了这个错误:

Aug 21 06:29:03 kama-odoo-server odoo13[24202]: NameError: name 'shipping_type' is not defined - - -

如何正确设置?我真的希望有人可以帮助我:) 谢谢!

标签: pythonodoo

解决方案


相关属性用于指定字段名称的序列。

通过遵循一系列关系字段并读取到达模型上的字段来给出相关字段的值。要遍历的字段的完整序列由相关属性指定。

使用选择字段时,该属性selection是强制性的,除非是相关扩展字段。

您可以在帐户模型中找到相关的选择字段,声明如下:

user_type_id = fields.Many2one('account.account.type', ...)
internal_type = fields.Selection(related='user_type_id.type', ...)

您还可以在帐户合作伙伴中找到一个选择字段,该字段使用基本模型中声明的常量列表:res_partner

from odoo.addons.base.models.res_partner import WARNING_MESSAGE, WARNING_HELP

invoice_warn = fields.Selection(WARNING_MESSAGE, 'Invoice', help=WARNING_HELP, default="no-message")

要保留shipping_selectioninSaleOrder类的声明,您需要删除related属性并修改shipping_type_purchase字段,如下所示:

shipping_type_purchase = fields.Selection(shipping_selection, ...)

如果SaleOrder类没有在同一个模块中声明,你只需像上面的例子一样导入它。

您可以将 decalreshipping_selection作为常量列表,然后修改该shipping_type_purchase字段:

SHIPPING_SELECTION = [
        ('type1', 'Instant'),
        ('type2', 'Same Day'),
        ('type3', 'JNE'),
        ('type4', 'Tokopedia'),
        ('type5', 'Pick Up'),
        ('type6', 'AnterAja-Reguler'),
        ('type7', 'J&T-Reguler'),
        ('type8', 'Ninja-Reguler'),

    ]

class SaleOrder(models.Model):

    shipping_type = fields.Selection(SHIPPING_SELECTION, ...)


class PurchaseOrder(models.Model):
    
    shipping_type_purchase = fields.Selection(SHIPPING_SELECTION, ...)

推荐阅读