我已创建了一个模块asset.management.handover
和asset.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>
答案 0 :(得分:0)
执行此操作的一种简单方法是在write
或create
方法上检查值。如果超过1个产品上存在序列,则会引发异常。
另一种方法是设置动态域。您可以说以下内容:
当field1
发生变化时,我希望只能从field2
因此,定义onchange
并返回
return {'domain': {'field_id': [('id', 'not in', used_serials)]}}
在used_serials
上,您将拥有已使用的连续剧的ID。