2012-05-15 2 views
1

OpenERP에는 db에 저장되지 않은 두 개의 기능 필드가 있습니다. 실제로 그들은 db에 열이 없습니다. 다른 테이블에서 즉시 계산됩니다. 나는 그들의 합이나 차이를 계산할 수 있기를 원합니다. 나는 그것을하는 무언가 (calculate sum of fields)를 보았다.하지만 데이터를 가져 오기 위해 db로 간다고 생각한다. 제발 이걸 어떻게 할 수 있니? db에 데이터를 저장하고 거기에서 꺼내는 것이 가장 좋은 방법입니까?OpenERP의 두 기능 필드 합계/차이를 계산하는 방법

답변

4

그들은 세 번째 계산 필드를 정의하고 "multi = ''"를 사용하여 차이를 계산할 수 있으며 나중에 세 번째 필드를 db에 저장할 수도 있고 나중에 필요할 경우 동적으로 유지할 수도 있습니다 외부 사용.

이점은 계산 후 3 번째 필드에 대한 2 필드 저장소 차이입니다.

예제 코드 조각은 다음과 같다 :

class code_play(osv.osv): 
_name = 'code.play' 

def _calc_function(self, cr, uid, ids, fields_list, args, context=None): 
    vals = {} 
    for id in ids: 
     fields = {} 
     for field in fields_list: 
      fields[field] = 10 
     fields["calc3"] = fields['calc1'] + fields['calc2'] 
     vals[id] = fields 
    return vals  

_columns = { 
    'name': fields.char('Name', required=True, size=50), 
    'calc1': fields.function(_calc_function, type='integer', store=False, multi="compute_person_data"), 
    'calc2': fields.function(_calc_function, type='integer', store=False, multi="compute_person_data"), 
    'calc3': fields.function(_calc_function, type='integer', store=False, multi="compute_person_data"), 
} 

다시 필드까지 설명한 바와 같이 멀티를 계산하지만, 동일한 기능 때문에 유형

# when called with ``ids=[1,2,3]``, ``compute_person_data`` could return: 
    { 
     1: {'calc1': 10, 'calc2': 10, 'calc3': 20}, 
     2: {'calc1': 10, 'calc2': 10, 'calc3': 20}, 
     3: {'calc1': 10, 'calc2': 10, 'calc3': 20} 
    } 

감사가 될 것 반환됩니다

4

당신에게 함수 필드를 다중 키워드와 결합하여 하나의 함수 내에서 계산할 수 있으며, 세 번째 기능 필드를 추가하는 것이 쉬울 것입니다.

class your_class(osv.osv): 
    _inherit = 'whatever' 

    def calc_fields(self, cr, uid, ids, fields, arg, context=None): 
     res = {} 
     for record in self.browse(cr, uid, ids, context=context): 
      res[record.id] = { 
       'field1': 5, # Calculate the field values here 
       'field2': 3, 
       'field3': 5+3, 
      } 
     return res 

    _columns = { 
     'field1': fields.function(calc_fields, multi='my_combination', string='Field 1'), 
     'field2': fields.function(calc_fields, multi='my_combination', string='Field 2'), 
     'field3': fields.function(calc_fields, multi='my_combination', string='Field 1 + Field 2'), 
    } 
your_class() 

이 예를 단순화하고 단지 '다'키워드의 중요성 깨끗한이 예제를 유지하고 지점으로 기능 필드 '형'키워드가 없습니다 명심

관련 문제