Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Odoo 10-向自定义模块添加订单行树字段_Python_Openerp_Odoo 10 - Fatal编程技术网

Python Odoo 10-向自定义模块添加订单行树字段

Python Odoo 10-向自定义模块添加订单行树字段,python,openerp,odoo-10,Python,Openerp,Odoo 10,我想添加一个具有树状视图的订单行字段,与销售和维修模块中的类似。在这些模块中,表单底部有一个不错的部分,允许您在列表中输入产品和价格。我相信这些是由sale.order.line和mrp.repair.line型号处理的 下面是我所说内容的图片: 我的目标是在我自己的自定义模块中加入类似的内容。我试过: 使用sale.order.line(sale\u order\u line=fields.One2many('sale.order.line','order\u id',string='or

我想添加一个具有树状视图的订单行字段,与销售和维修模块中的类似。在这些模块中,表单底部有一个不错的部分,允许您在列表中输入产品和价格。我相信这些是由sale.order.line和mrp.repair.line型号处理的

下面是我所说内容的图片:

我的目标是在我自己的自定义模块中加入类似的内容。我试过:

  • 使用sale.order.line(sale\u order\u line=fields.One2many('sale.order.line','order\u id',string='order line',)添加One2many字段)。有了正确的视角,这条线让我几乎得到了我想要的。但是,当我试图保存记录时,它会给我一个“记录不存在或已被删除”错误
  • 使用mrp.repair.line添加One2many字段(mrp\u repair\u line=fields.One2many('mrp.repair.line','repair\u id','Operation line',copy=True,readonly=False,))。同样,这几乎是可行的,但它说“你必须在维修表中选择一个价格表! 请在选择产品之前设置一个“当我尝试保存记录时”
  • 下面是使用我的模块获取销售订单行的步骤。我试图保存记录时出现验证错误。它给了我一个错误的提示(引用对象:产品度量单位-Product.uom),但我无法解决这个问题
  • 根据销售和mrp_维修模块中的代码,使用自己的字段和一个2多/多个1关系创建自己的订单行模型。这实际上允许我保存记录,但我不知道如何添加除product_id(product_id=fields.manyOne('product.product','product',required=False)之外的任何字段
以下是我迄今为止所做的工作。我已经注释掉了显示我在提出解决方案方面不同尝试的字段。最后两行显示了我试图将价格和税费显示在自定义订单行中的尝试

models.py

from odoo import models, fields, api
from odoo.addons import decimal_precision as dp

class mymodule_base(models.Model):
    _name = 'mymodule.mymodule'
    _description = 'Order'

    # sale_order_line = fields.One2many('sale.order.line', 'order_id', string='Order Lines',)

    # mrp_repair_line = fields.One2many('mrp.repair.line', 'repair_id', 'Operation Lines', copy=True, readonly=False,)

    # custom_order_line = fields.One2many('mymodule.line', 'order_id', 'Operation Lines')

class mymodule_line(models.Model): # My custom order lines model
    _name = 'mymodule.line'
    _description = 'Order Line'

    order_id = fields.Many2one('mymodule.mymodule', 'Order')

    product_id = fields.Many2one('product.product', 'Product', required=False)

    # tax_id = fields.Many2many('account.tax', 'repair_operation_line_tax','repair_operation_line_id', 'tax_id', 'Taxes')
                                    
    # price = fields.Many2many('product.product', 'list_price', 'Price')
views.xml

<odoo>
    <data>
        <!-- FORM VIEW -->
        <record id="mymodule.form" model="ir.ui.view">
            <field name="name">MyModule Form</field>
            <field name="model">mymodule.mymodule</field>
            <field name="arch" type="xml">
                <notebook>
                    <!-- Order Lines -->
                    <page string="Order Lines">
                        <field name="sale_order_line">
                            <tree string="Order Lines" editable="bottom">
                                <field name="product_id"/>
                            </tree>
                        </field>
                    </page>
                </notebook>
            </field>
        </record>
    </data>
</odoo>

MyModule表单
mymodule.mymodule
我应该从这里去哪里?我将非常感谢任何帮助

编辑 下面是一些关于我试图通过我的订单行实现的细节。在我的订单行中,我希望有以下字段:

  • 产品名称
  • 产品说明
  • 产品数量
  • 产品价格
  • 小计

与销售订单行非常相似,我希望其他字段中的默认值根据product name(product_id)字段中的内容设置。例如,根据所选产品,将自动填写价格和税费字段,以反映与该产品关联的价格和税费。这些字段还需要能够轻松修改,因为对于我的特殊需求,价格、税费和描述可能会根据情况而变化。我已经尝试添加价格和税收字段,但遇到了问题。我不知道如何正确地默认这些字段以反映与每个产品相关的内容。

首先,对不相关的模型重用现有模型(
sale.order.line
mrp.repair.line
)。每个模型都应该有一个特定的用途,并且只能用于该用途。您没有提到您的字段将用于什么,但通常我建议使用您的
mymodule.line
示例

只是想澄清一下,您所指的字段类型称为a。它只是来自另一个模型(
mymodule.line
)的一组记录,链接到当前模型(
mymodule.mymodule
)中的给定记录

通常,当您在
One2many
字段上保存一行时收到错误时,可能是因为
必需的
字段(对于
mymodule.line
型号)未设置。这很可能是您在前两次尝试中出错的原因。通常很难调试,因为必填字段不可见或根本不在视图中

除了
product\u id


您需要在您的
mymodule.line
上定义所有要包含的字段。您试图添加哪些字段以及遇到了哪些问题?

我找到了解决方案

在下面的示例中,我使用onchange方法,根据所选产品中定义的字段,使用适当的值和文本填充description、price和tax_id字段。每当更改product_id字段时,前面提到的字段都会根据新选择的产品自动更新新信息ct

型号.py

# -*- coding: utf-8 -*-

from odoo import models, fields, api
from odoo.addons import decimal_precision as dp

class mymodule_base(models.Model):
    _name = 'mymodule.mymodule' # model name
    _description = 'My Module'

    order_lines = fields.One2many('mymodule.line', 'line_id', 'Order Lines')

class mymodule_line(models.Model):
    _name = 'mymodule.line'
    _description = 'My Module Order Lines'

    line_id = fields.Many2one('mymodule.mymodule', string='Order') 

    product_id = fields.Many2one('product.template', string='Product') # Product name

    tax_id = fields.Many2many('account.tax', string='Taxes') # Product default taxes

    price = fields.Float(string='Price')

    description = fields.Text(string='Description')

    # Onchange method fills description, price, and tax_id fields based on product_id
    @api.onchange('product_id')
    def _onchange_product_id(self):
        self.description = self.product_id.description_sale # Fill description box from description_sale
        self.price = self.product_id.lst_price # Fill price box with default product price
        self.tax_id = self.product_id.taxes_id # Fill tax box with default tax (many2many)
views.xml

<record id="mymodule.form" model="ir.ui.view">
    <field name="name">My Module Form</field>
    <field name="model">mymodule.mymodule</field>
    <field name="arch" type="xml">
        <form>
            <sheet>
                <notebook>
                    <!-- Order Lines -->
                    <page string="Order Lines">
                        <field name="order_lines" mode="tree,kanban">
                            <tree string="Order Lines" editable="bottom">
                                <field name="product_id"/>
                                <field name="description"/>
                                <field name="price"/>
                                <field name="tax_id" widget="many2many_tags" domain="[('type_tax_use','=','sale')]"/>
                            </tree>
                        </field>
                    </page>
                </notebook>
            </sheet>
        </form>
    </field>
</record>

我的模块表单
mymodule.mymodule

这对我来说非常有效,但如果有更好的方法实现此功能,我愿意接受建议。感谢travisw为我指明了正确的方向!

您好。非常感谢您的回答。我感谢您花时间帮助我。我正在尝试开发一个修复模块。我理解