0

年齢を計算できるコードを作りたい

def _compute_age(self, cr, uid, ids, field_name, field_value, context=None):
    records = self.browse(cr, uid, ids, context=context)
    result={}
    for r in records:
        age=0
        if r.date_birth:
            d = strptime(r.date_birth,"%Y-%m-%d")
            count = date(d[0],d[1],d[2])-date.today()
            age = count.days/365 
        result[r.id] = age
    return result

しかし、間違った'cursor' オブジェクトには 'browse' 属性がありません。何が問題なのでしょうか?

PS:これは私の新しいコードです

def _compute_age(self, cr, uid, ids,field_name,field_value,arg, context=None):
    records = self.browse(cr, uid, ids, context=context)
    result = {}
    for r in self.browse(cr, uid, ids, context=context):
        age=0
        if r.date_birth:
            print date_birth
            age = (datetime.now()-datetime.strptime(r.date_birth,"%Y-%m-%d")).days/365.25
        result[r.id] = age 

    return result
_columns = {
    'date_birth': fields.date('Date of Birth'),
    'age' : fields.function(_compute_age, type='char', method=True, string='Age'),
4

4 に答える 4

3

エラー メッセージは、日付の計算とは関係ありません。使用している OpenERP のバージョンと互換性のないモジュールを使用している可能性があります。

モジュール、OpenERP とアドオンのバージョン、および完全なトレースバックに関する詳細を提供する必要があります。

エラーとは関係ありませんが、年齢の計算では負の値が返されます。

より単純なコードは次のようになります。

from datetime import datetime
...
    if r.date_birth:
        age = (datetime.now()-datetime.strptime(r.date_birth,"%Y-%m-%d")).days/356

以下の新しいコードとエラー メッセージについては、新しいインデックスに割り当ててリストに追加することはできませんresult。代わりに辞書に変更してください。result = []に変更result = {}

于 2012-07-23T11:35:17.523 に答える
1

以下は私のコードです。文字列を返します。

from dateutil.relativedelta import relativedelta
from datetime import datetime
def _compute_age(self, cr, uid, ids, field_name, arg, context={}):
    result = {}
    now = datetime.now()
    for r in self.browse(cr, uid, ids, context=context):
      if r.date_birth:
        dob = datetime.strptime(r.date_birth,'%Y-%m-%d')
        delta=relativedelta (now, dob)
        result[r.id] = str(delta.years) +"y "+ str(delta.months) +"m "+ str(delta.days)+"d" #if you only want date just give delta.years
      else:
        result[r.id] = "No DoB !"
    return result


_columns = {
    'age' : fields.function(_compute_age, method=True, type='char', size=32, string='Age',),
}
于 2012-07-24T05:05:45.390 に答える