Odoo 11 ::: Fields Type에 대해 알아보자 (3)
Odoo 11 필드 타입 3
속성 필드
속성 선언하기
속성은 특별한 필드입니다 : fields.property.
class res_partner(osv.osv): _name = "res.partner" _inherit = "res.partner" _columns = { 'property_product_pricelist': fields.property( 'product.pricelist', type='many2one', relation='product.pricelist', string="Sale Pricelist", method=True, view_load=True, group_name="Pricelists Properties"), }
다음은 이 속성에 대한 .XML 파일에 기본값을 만들어야합니다.
<record model="ir.property" id="property_product_pricelist"> <field name="name">property_product_pricelist</field> <field name="fields_id" search="[('model','=','res.partner'), ('name','=','property_product_pricelist')]"/> <field name="value" eval="'product.pricelist,'+str(list0)"/> </record>
- TIP
기본값이 다른 모듈의 자원을 가리키면 다음과 같이 ref 함수를 사용할 수 있습니다 : <field name="value" eval="'product.pricelist,'+str(ref('module.data_id'))"/>
form에 속성 배치하기
폼에 속성을 추가하려면 폼에 <properties /> 태그를 넣으면됩니다. 그러면이 개체와 관련된 모든 속성 필드가 자동으로 추가됩니다.
사용자 시스템의 권한에 따라 시스템이 추가됩니다. (일부 사용자는 특정 속성을 변경할 수 있고 다른 사용자는 그렇지 않을 수 있습니다).
특성은 group_name 속성에 따라 섹션별로 표시됩니다. (이것은 분리 자 태그처럼 클라이언트에서 렌더링됩니다).
이게 어떻게 작동합니까?
fields.property 클래스는 fields.function을 상속하며 읽기 및 쓰기 메서드를 재정의합니다.
이 필드의 유형은 many2one이므로 양식에서 many2one 함수와 같은 속성이 표시됩니다.
그러나 속성의 값은 ir.property 클래스 / 테이블에 완전한 레코드로 저장됩니다.
저장된 값은 각 속성이 다른 객체를 가리킬 수 있기 때문에 many2one이 아닌 형식 참조 필드입니다.
관리 메뉴에서 등록 정보 값을 편집하는 경우 이는 유형 참조 필드로 표시됩니다.
속성을 읽을 때이 프로그램은 읽고있는 객체의 인스턴스에 연결된 속성을 제공합니다.
이 객체에 값이 없으면 시스템에서 기본 속성을 제공합니다.
프로퍼티의 정의는 다른 필드와 마찬가지로 ir.model.fields 클래스에 저장됩니다.
속성의 정의에서 속성으로 변경할 수있는 그룹을 추가 할 수 있습니다.
속성 또는 일반 필드 사용
새 기능을 추가하려면 속성을 일반 필드로 구현하도록 선택해야합니다. 개체를 상속하고이 개체를 확장하려면 일반 필드를 사용하십시오.
새 속성이 객체와 관련이 없지만 외부 개념에 관련된 경우 속성을 사용합니다.
다음은 일반 필드 또는 속성 중에서 선택할 때 도움이되는 몇 가지 팁입니다.
일반 필드는 객체를 확장하여 더 많은 피쳐 또는 데이터를 추가합니다.
속성은 객체에 첨부되고 특별한 기능을 가진 개념입니다.
예 )
- 회사에 따라 동일한 부동산에 대한 다른 가치 - 필드 당 권한 관리 - 그것은 자원들 간의 연결고리입니다 (many2one)
- 예제1: Account Receivable
특정 파트너에 대한 기본 "Account Receivable"은 다음과 같은 이유로 인해 이 속성으로 구현됩니다.
- 이 개념은 파트너가 아닌 계정 차트와 관련된 개념이므로 파트너 폼에 표시되는 계정 속성입니다. 회계사의 경우이 필드에서 권한을 관리해야하며 파트너 객체에 적용되는 것과 동일한 권한이 아닙니다. 따라서 파트너 양식의 이 필드에만 특정 권한이 있습니다. 회계사만 파트너의 채권을 변경할 수 있습니다. - 이것은 여러 회사 필드입니다. 동일한 파트너는 사용자가 속한 회사에 따라 다른 채권값을 가질 수 있습니다. 다중 회사 시스템에는 회사 당 하나의 계정 차트가 있습니다. 파트너의 계정 채권은 판매 주문을 한 회사에 따라 다릅니다. - 기본 계정 채권은 모든 파트너에 대해 동일하며 일반 속성 메뉴 (관리)에서 구성됩니다.
- TIP
한 가지 재미있는 점은 속성이 "스파게티"코드를 피하는 것입니다.
계정 모듈은 파트너 (base) 모듈에 따라 다릅니다. 하지만 회계 모듈없이 파트너 (base) 모듈을 설치할 수 있습니다.
파트너 개체의 계정을 가리키는 필드를 추가하면 두 개체가 서로 종속됩니다.
유지 보수 및 코드 작성이 훨씬 어렵습니다 (예 : 두 테이블이 서로 가리키는 경우 테이블 제거를 시도).
- 예제 2: Product Times
제품 만료 모듈은 제품과 관련된 모든 지연을 제거 날짜, 제품 시간등등을 구현합니다.이 모듈은 식품 산업에 매우 유용합니다.
이 모듈은 product.product 객체를 상속 받아 새 필드를 추가합니다.
class product_product(osv.osv): _inherit = 'product.product' _name = 'product.product' _columns = { 'life_time': fields.integer('Product lifetime'), 'use_time': fields.integer('Product usetime'), 'removal_time': fields.integer('Product removal time'), 'alert_time': fields.integer('Product alert time'), } product_product()
이 모듈은 product.product 객체에 간단한 필드를 추가합니다. 속성을 사용하지 않았습니다.
이유는 다음과 같습니다.
우리는 제품을 확장하고 life_time 필드는 제품과 관련된 개념이며 다른 객체에는 관련되지 않습니다. 우리는 필드 당 올바른 관리가 필요하지 않으며, 다른 지연은 모든 제품을 관리하는 동일한 사람들이 관리합니다.