2017-11-10 8 views
4

product.service.type이라는 새 모델을 만들었습니다. 그런 다음 product.product 모델에서 Many2many 필드 (service_type, product.service.type 모델을 가리킴)를 만들었습니다. Odoo에서 동적 도메인 문제를 해결하는 방법은 무엇입니까?

는 지금은 product_idservice_type_id 필드가 모델 test, 모두 Many2one 각각 product.productproduct.service.type를 가리키는 있습니다.

내가 원하는 것은 제품을 선택하면 선택한 제품의 서비스 유형 만 표시되도록 서비스 유형 도메인이 변경된다는 것입니다. 따라서이 큰 노력

def onchange_product_id(self, cr, uid, ids, product_id, context=None): 
    if product_id: 
     product = self.pool.get('product.product').browse(
      cr, uid, [product_id], context=context) 
     service_type_ids = product.service_type.mapped('id') 
     return { 
      'domain': { 
       'service_type_id': [('id', 'in', service_type_ids)], 
      }, 
     } 

이 경우 onchange가 실행되고 있지 않기 때문에 당신이 기록을 (새로 생성되지 않음) 편집 할 때 문제이고 : 나는 onchange 통해 관리 도메인은 모든 서비스 유형을 보여줍니다.

title 필드와 함께 파트너 형식으로 같은 문제가 발생할 수 있습니다. 회사 인 새로운 파트너를 만들고 title 도메인의 도메인을 변경하여 Corp., Ltd. 등과 같은 레코드 만 선택할 수 있도록 설정합니다.하지만 파트너를 연락처로 설정하면 다음 중에서 선택할 수 있습니다. 의사와 같은 레코드, 마담, 미스 등 이제 파트너를 원하는 데이터로 저장하고 상단 바의 다른 메뉴로 이동하십시오. 파트너 양식으로 돌아가 작성한 파트너를 열어 편집하십시오. is_company 필드를 변경하지 않고 title 필드를 확인하십시오. 파트너가 특정 클래스 (회사 또는 연락처)에 속하더라도 모든 타이틀을 사용할 수 있습니다.

어떻게이 문제를 해결할 수 있습니까?

답변

1

다음 사항을 고려해보십시오. 그것은 성취 될 수 있습니다.

  • 많은 2Many 필드 인 xml 측면에서 product_id로 컨텍스트를 업데이트하십시오.
  • 재정 검색 (예를 들어) 제품 서비스 유형 모델
  • 확인의 방법은 당신이 같은 상황을 받아 슈퍼를 반환 그렇지 않으면 논리를 해고하는 경우() 메소드

:

@api.model 
def search(self, args, offset=0, limit=None, order=None, count=False): 
    context = self._context or {} 

    # Display product list which has not included in CofA Template 
    if context.get('product_service_id'): 
     product = self.env['product.product'].browse(context.get('product_service_id')) 
     service_type_ids = product.service_type.mapped('id') 
     args += [('service_type_id', 'not in', service_type_ids)] 

    return super(ProductServiceType, self).search(args, 
               offset, 
               limit, 
               order, 
               count=count) 

XML 측면에서 :

<field name="product_id"/> 
<field name="many2many_field" context="{'product_service_id': product_id}"> 

참고 : I 새 API에 따라 답변하려고 시도했지만 테스트하지 않았습니다. 이전 API 또는 요구 사항에 따라 변환해야합니다.

+0

이 응답 해 주셔서 감사합니다 도메인있을 것이다 하지만 불행히도 작동하지 않습니다. XML 컨텍스트를'many2many' 필드에 추가하라고 말했지만이 필드는'product.product' ('service_type')와'product.service.type' ('product_ids')에 존재합니다. 'context'를'test' 모델의'service_type_id'라는 이름의 Many2one 필드에 추가하는 것을 의미하지 않습니까? 나는 또한 이것을했다. 그러나'search'는 심지어 처형되지도 않는다. – forvas

0

test 모델의 경우 두 필드 옆에 product.product이라는 service_type 필드와 관련된 많은 추가 2가 필요합니다. 그런 다음 도메인을 service_type_id으로 지정하십시오.당신이 test

  1. service_type 모델에

(M2M product.service.type에) : 여기

모델에

는, 당신은 product.product, 그림입니다

  1. product_id
  2. service_type_id (M2O product.service.type에) (M2O product.product에)
  3. available_service_type_ids 당신의 XML을
  4. (product.productservice_type에 계산 된 M2M 관련이 /가), service_type_id[(id , in, available_service_type_ids and available_service_type_ids[0] and available_service_type_ids[0][2] or False)]