仅选择Many2one字段上的可用数据

时间:2017-08-25 03:01:49

标签: python python-2.7 openerp

我已创建了一个模块asset.management.handoverasset.management.handover.lines来保存所有选定的资源。

我已完成过滤Many2one字段上的数据,如下所示。 这是我的.py代码:

asset_name_id = fields.Many2one('account.asset.asset', string = "Asset", 
required = True)
serial_number_id = fields.Many2one('account.asset.asset.line', string = 
"Serial number", required = True)

我的.xml代码:

<field name="asset_name_id"/>
<field name="serial_number_id" domain = "[('serial_no_id', '=', 
asset_name_id)]"/>

如果我选择asset1,则所有可用的序列号为。可以选择到asset1。问题是:

我想,例如,如果我选择asset1然后选择序列号。 123然后我想再次选择另一个属于asset1的项目,然后我想选择序列号。再次,它出现了问题,序列号。 123再次可用。我想要实现的只是序列号。 123将不再为Many2one所用,并且无法在该领域看到。

please click this link to view the picture

(编辑)的 这是我的完整代码.py

from odoo import api, fields, models
from datetime import datetime

class AssetManagementHandover (models.Model):
    _name = 'asset.management.handover'

    name = fields.Char(string = "Sequence")
    issuer_company_id = fields.Many2one ('res.partner', string = "Issuer's 
    Company")

    issuer_id = fields.Many2one ('hr.employee', string = "Issuer's Name")
    issuer_email = fields.Char (string = "Email", readonly = True, related = 
    'issuer_id.user_id.login', store = True)
    source_loc = fields.Many2one ('stock.warehouse', string = "Source 
    Location")

    recipient_company_id = fields.Many2one ('res.partner', string = 
    "Recipient's Company")
    recipient_id = fields.Many2one ('hr.employee', string = "Recipient's 
    Name")
    destination_loc = fields.Many2one ('stock.warehouse', string = 
    "Destination Location")

    remarks = fields.Text (string = "Remarks")

    date = fields.Date (string = "Date", default = lambda *a: 
    datetime.today())
    transfer_type = fields.Char (string = "Transfer type", default = "Asset 
    Handover", readonly = True)
    custodian_id = fields.Many2one ('res.users', string = "Custodian",     
    readonly = True, default=lambda self: self.env.uid)
    processed_by = fields.Many2one ('hr.employee', string = "Processed by", 
    readonly = True)
    lines_ids = fields.One2many('asset.management.handover.lines', 
    'lines_id', string = " ")

    state = fields.Selection ([
    ('draft', "Draft"),
    ('transfer', "Transferred"),
    ('cancel', "Cancelled"),
    ], string = "State", default = 'draft')

    @api.onchange('issuer_company_id')
    def onchange_company(self):
        self.issuer_id = ''
        self.emp_email = ''
        self.source_loc = ''

    @api.multi
    def button_transfer(self):
        self.state = 'transfer'
        self.processed_by = self.env['hr.employee'].browse(self.env.uid)

    @api.multi
    def button_cancel(self):
        self.state = 'cancel'
        self.processed_by = ''

class AssetManagementHandoverLine (models.Model):
_name = 'asset.management.handover.lines'

lines_id = fields.Many2one('asset.management.handover')
asset_name_id = fields.Many2one('account.asset.asset', string = "Asset", required = True)
serial_number_id = fields.Many2one('account.asset.asset.line', string = "Serial number", required = True)
model = fields.Char (string = "Model", related = 'asset_name_id.model_id', store = True, readonly = True)
condition_id = fields.Many2one ('asset.condition', string = "Asset Condition", required = True)
state = fields.Char (string = "State")
asset_pic = fields.Char(string = "Asset picture")
total = fields.Integer(string = "Total", default = "1")

@api.onchange('asset_name_id')
def on_change(self):
    self.serial_number_id = ''

这是我在xml

中的asset.management.handover的表单视图
<!--Hand over form view-->
    <record model="ir.ui.view" id="handover_form_view">
        <field name="name">handover.form.view</field>
        <field name="model">asset.management.handover</field>
        <field name="arch" type="xml">
            <form>
                <header>
                    <button name="button_transfer" string="Transfer"     
type="object" state="cancel"/>
                    <button name="button_cancel" string="Cancel" 
type="object"/>
                    <field name="state" widget="statusbar"/>
                </header>
                <sheet>
                    <group>
                        <group>
                            <field name="date"/>
                            <field name="issuer_company_id" 
placeholder="Company name" domain="[('is_company','=',True)]"/>
                            <field name="issuer_id" placeholder="Employee's 
Name" domain = "[('address_id', '=', issuer_company_id)]"/>
                            <field name="source_loc" domain = "
[('partner_id', '=', issuer_company_id)]"/>
                            <field name="issuer_email"/>
                            <field name="remarks"/>
                        </group>
                        <group>
                            <field name="transfer_type"/>
                            <field name="recipient_company_id" 
placeholder="Company name" domain="[('is_company','=',True)]"/>
                            <field name="recipient_id" 
placeholder="Employee's Name" domain = "[('address_id', '=', 
recipient_company_id)]"/>
                            <field name="destination_loc" domain = "
[('partner_id', '=', recipient_company_id)]"/>
                            <field name="custodian_id"/>
                            <field name="processed_by"/>
                        </group>

                        <field name="lines_ids">
                            <tree editable="bottom">
                                <field name="asset_name_id"/>
                                <field name="serial_number_id" domain = "
[('serial_no_id', '=', asset_name_id)]"/>
                                <field name="model"/>
                                <field name="condition_id"/>
                                <field name="state"/>
                                <field name="asset_pic"/>
                                <field name="total" sum="total" string = 
"Total Asset"/>
                            </tree>

                            <form>
                                <sheet>
                                    <group>
                                        <group>
                                           <field name="asset_name_id"/>
                                            <field name="serial_number_id" 
domain = "[('serial_no_id', '=', asset_name_id)]"/>
                                            <field name="model"/>
                                            <field name="condition_id"/>
                                        </group>
                                        <group>
                                            <field name="state"/>
                                            <field name="asset_pic"/>
                                        </group>
                                    </group>
                                </sheet>
                            </form>
                        </field>
                    </group>
                </sheet>
            </form>
        </field>
    </record>

1 个答案:

答案 0 :(得分:0)

执行此操作的一种简单方法是在writecreate方法上检查值。如果超过1个产品上存在序列,则会引发异常。

另一种方法是设置动态域。您可以说以下内容:

field1发生变化时,我希望只能从field2

上的这些记录中进行选择

因此,定义onchange并返回

return {'domain': {'field_id': [('id', 'not in', used_serials)]}}

used_serials上,您将拥有已使用的连续剧的ID。