Python OpenERP-v7:从销售订单向交货订单添加自定义字段

Python OpenERP-v7:从销售订单向交货订单添加自定义字段,python,openerp,odoo,openerp-7,Python,Openerp,Odoo,Openerp 7,我在销售订单表单中添加了一个自定义字段,现在我希望它显示在确认销售订单后生成的相应交货订单上。在v8中可能有一种更简单的方法来实现这一点,但我必须在v7中实现这一点,所以请只回答将在OpenERP v7中起作用的答案 在尝试了许多其他方法来实现这一点后,我在odoo.com上发现了一个建议,有人建议您应该尝试覆盖“\u prepare\u order\u picking”函数,因为它实际上是根据销售订单中的值创建交货订单的,通过返回要在交货单上显示的值的字典。我已经从该链接获取了提供的代码,但它

我在销售订单表单中添加了一个自定义字段,现在我希望它显示在确认销售订单后生成的相应交货订单上。在v8中可能有一种更简单的方法来实现这一点,但我必须在v7中实现这一点,所以请只回答将在OpenERP v7中起作用的答案

在尝试了许多其他方法来实现这一点后,我在odoo.com上发现了一个建议,有人建议您应该尝试覆盖“\u prepare\u order\u picking”函数,因为它实际上是根据销售订单中的值创建交货订单的,通过返回要在交货单上显示的值的字典。我已经从该链接获取了提供的代码,但它对我不起作用。这是你的电话号码。非常感谢您的帮助,我已经尽力把一切都说清楚了,但如果需要澄清,请告诉我,我会修改我的问题

我已经修改了我的代码,使其更易于阅读,并将需要从销售订单中获取的自定义字段数量限制为一个字段,在实际工作时需要多个字段,但一旦正确实现,应该很容易扩展

我修改的代码如下:

__openerp_uuuuuuuuuuuuuuuuy.py:

{
"name"        : "Nick's Sale order/delivery order form fields",
"version"     : "1.0",
"author"      : "Nick",
"category"    : "Custom",
"depends"     : ['sale', 'stock'],
"description" : """ Sale and delivery order customizations by Nick """,
'data'        : ['nicks_sale_fields.xml', 'nicks_delivery_fields.xml'],
'installable' : True,
}
nicks_sale_fields.py:

from openerp.osv import fields,osv
class nicks_sale_fields(osv.Model):
    _inherit='sale.order'
    def _prepare_order_picking(self, cr, uid, order, context=None):
        vals=super(sale_order, self)._prepare_order_picking(cr, uid, order, context=context)
        vals.update({'my_custom_field': 'my_custom_field_value'})
        return vals

    _columns={
        'my_custom_field': fields.char('field description', required=True, store=True, size=3, help='field help text',),
    }
    _defaults={
        'my_custom_field': 'yes'
    }
nicks_sale_fields.xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <record model="ir.ui.view" id="nicks_sale_order_fields">
        <field name="name">sale.order.form</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/sheet/notebook/page[1]/group" position="after">
                <group string="Sales order: custom fields">
                    <field name="my_custom_field" string="Sale form descriptor" class="oe_inline"/>
                </group>
            </xpath>
        </field>
</record>
</data>
</openerp>
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <record model="ir.ui.view" id="nicks_deliv_order_fields">
        <field name="name">stock.picking.out.form</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="stock.view_picking_out_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
                <group string="Delivery order: custom fields">
                    <field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
                </group>
            </xpath>
        </field>
    </record>
</data>
</openerp>

销售单
销售订单
nicks_delivery_fields.xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <record model="ir.ui.view" id="nicks_sale_order_fields">
        <field name="name">sale.order.form</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/sheet/notebook/page[1]/group" position="after">
                <group string="Sales order: custom fields">
                    <field name="my_custom_field" string="Sale form descriptor" class="oe_inline"/>
                </group>
            </xpath>
        </field>
</record>
</data>
</openerp>
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <record model="ir.ui.view" id="nicks_deliv_order_fields">
        <field name="name">stock.picking.out.form</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="stock.view_picking_out_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
                <group string="Delivery order: custom fields">
                    <field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
                </group>
            </xpath>
        </field>
    </record>
</data>
</openerp>

股票、挑选、挑选、表格
销售订单

您需要在
openerp\uuuuuuuuuuy.py
文件中添加
销售库存
(取决于销售和库存)模块的依赖项。像

"depends"     : ['sale_stock'],
nicks\u delivery\u fields.xml
中,您为修改交货订单视图提供了错误的型号名称。应该是
stock.picking

<?xml version="1.0" encoding="utf-8"?>
<openerp>
  <data>
      <record model="ir.ui.view" id="nicks_deliv_order_fields">
          <field name="name">stock.picking.out.form</field>
          <field name="model">stock.picking</field>
          <field name="inherit_id" ref="stock.view_picking_out_form"/>
          <field name="arch" type="xml">
              <xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
                  <group string="Delivery order: custom fields">
                      <field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
                  </group>
              </xpath>
          </field>
      </record>
  </data>
</openerp>

股票、挑选、挑选、表格
选股

假设您只想让定制销售订单字段在交付时可供读取,您可以使用
相关的
计算字段:

class StockPicking(osv.Model):
    _inherit='stock.picking'
    _columns={
        'my_custom_field': fields.related(
            'sale_id', 'my_custom_field', type='char',
            readonly=True, string='field description'),
    }

多亏了这里每个人的帮助,我才能够解决我的问题,@daniel reis正确地说明了如何使用相关字段,这非常有效。使我的模块依赖于uuu openerp_uuuuuy.py文件中的“sale_stock”也有帮助,因此感谢@atul arvind。在这没有完全起作用之后,我不得不进一步挖掘,发现由于stock.picking.out模型继承自stock.picking的方式(在v7中,我认为这在v8中是固定的),有必要创建两个自定义类,一个继承自stock.picking,另一个继承自stock.picking.out。然后,在这些类中的每一个中,定义自定义字段,然后它们将显示,继承将正常工作,如下所示:

class stock_picking_out(osv.Model):
    _name = 'stock.picking.out'
    _inherit = 'stock.picking.out'
    _columns = { 'my_custom_field': fields.related(
        'sale_id', 'my_custom_field', type='char',
        readonly=True, string='field description'),
    }
class stock_picking(osv.Model):
    _name = 'stock.picking'
    _inherit = 'stock.picking'
    _columns = { 'my_custom_field': fields.related(
        'sale_id', 'my_custom_field', type='char',
        readonly=True, string='field description'),
    }
然后,在我的xml文件中,我将模型行更改为:

<field name="model">stock.picking.out</field>
stock.picking.out
一切都从这里开始,我的销售订单中的自定义字段存储在数据库表sale_order中,并正确显示在交货订单字段中


关于这篇文章的任何问题,请随时与我联系,我会尽力回答。

注意:你不需要
store=True
,因为它不是一个函数字段。谢谢,我可以告诉你我很接近,但是字段没有显示在表单中,我已经对xml进行了更改,所以现在模型是stock.picking,在“nicks\u delivery\u fields”类中,我继承了stock.picking。我想我一定是自定义了错误的视图,因为在我进行这些更改(以及在您的帮助之前的其他更改)之前,我的字段出现了,尽管它们并不是我想要的。我不明白的是,在我的xml代码中,与销售订单字段相比,我的交货订单字段没有做任何不同的事情,销售订单字段显示得很好。我能看到的唯一区别是,当我在查看销售订单时在开发人员模式下单击“管理视图”时,我正在自定义的视图对象与我在自定义类(sale.order)中继承的对象相同,其中,在“交货单管理”视图菜单中,我自定义的视图对象是“stock.picking.out”,但我在自定义类中继承了“stock.picking”。我在某个地方读到,我可能需要为stock.picking.out创建第二个类,并复制我尝试创建的字段,因此现在我有两个类,它们的_列具有相同的条目,一个继承stock.picking.out,一个继承stock.picking。然后,在xml中,如果我将模型设置为stock.picking,字段仍然不会显示,如果我将模型设置为stock.picking.out,我会得到一个无效的xml错误,跟踪中会显示:“无法为model:stock.picking.out呈现view nicks\u sale\u fields.nicks\u deliver\u order\u字段”,希望这可以帮助您诊断我的问题。谢谢,查看我对Atul回答的评论,了解后续问题Nick,这一个对你有帮助吗?