Сначала домен обоих полей должен выглядеть следующим образом:
<field .... attrs=" {'invisible': [('sale_invoice_type', '!=', 'cash')]}"/>
<field .... attrs=" {'invisible': [('sale_invoice_type', '=', 'cash')]}"/>
ЕСЛИ Решение не сработало, потому что вы не должны иметь одно и то же поле два раза в поле зрения. Odoo будет сбит с толку, когда его передадут.
Но вы можете обойти это, создав новое поле.
В вашей модели определите другое поле партнера, просто фиктивное, чтобы использовать его вместо реального partner_id, но убедитесь, что оба поля вконец записи и создания всегда будет равен.
partner_no_create = fields.Man.......
В вашем коде убедитесь, что эти два поля всегда равны:
# I think this onchage handle the cases in Odoo views
@api.onchange('partner_id')
def set_partner_no_create(self):
if self.sale_invoice_type != 'cash':
self.partner_no_create = self.partner_id
@api.onchange('partner_no_create')
def set_partner_no_create(self):
if self.sale_invoice_type == 'cash':
self.partner_id = self.partner_no_create
В вашем XML
<field name="partner_no_create" string="partner" domain="[('customer','=',True),('sale_invoice_type','=',sale_invoice_type)]"
context="{'search_default_customer':1, 'show_address': 1,'default_sale_invoice_type':sale_invoice_type}"
attrs=" {'invisible': [('sale_invoice_type', '!=', 'cash')]}" options='{"always_reload": True, "no_create_edit": True}'/>
<field name="partner_id" domain="[('customer','=',True),('sale_invoice_type','=',sale_invoice_type)]"
context="{'search_default_customer':1, 'show_address': 1,'default_sale_invoice_type':sale_invoice_type}"
attrs="{'invisible': [('sale_invoice_type', '=', 'cash')]}" options='{"always_reload": True}'/>
Но все же приходится обрабатывать больше случаев, особенно когда запись обновляется или создается из вызова RPC, вам необходимо переопределить метод create и write для обработки всех случаев.