0

ticket.pyで。私には2つのクラスがあります。クラスdeposit.lineおよびres_partner(継承)。クラスdeposit.lineの日付を取得したいのですが、クラスres_partner(inherit)でのその関数

def _compute_dept2(self, cr, uid, ids, amount, arg, context=None):
    result = {}
    obj2 = self.pool.get('deposit.line')
    for record in obj2.deposit_line:

        temp1 = record.date
        print temp1 
        print result
    return result

しかし、その既存の印刷の結果は誤りです。どうしたの ?私のコードを修正してください

PS:私の説明はあまり良くありません。しかし、私のコードを見て、確かに私の説明を知っています。

この私の完全なコード:

class deposit_line(osv.osv):
    _name ="deposit.line"
    _description = "Deposit Line" 

    _columns = {
        'name': fields.char('Name', size=64),
        'ref': fields.char('Reference', size=64),
        'amount': fields.float('Amount'),
        'date': fields.date('Date', required=True),
        'deposit_id': fields.many2one('res.partner', 'Deposit ', required=True, ondelete='cascade'),
    }
deposit_line()


class res_partner(osv.osv):
    _inherit = 'res.partner'

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

    def _compute_dept(self, cr, uid, ids, deposit, available, arg, context=None):
        result = {}
        for r in self.browse(cr, uid, ids, context=context):
           avail=0
           temp = r.available
           if r.deposit:
                avail = r.deposit + temp
           result[r.id] = avail
        return result

    def _compute_dept2(self, cr, uid, ids, amount, arg, context=None):
        result = {}
        obj2 = self.pool.get('deposit.line')
        for record in obj2.deposit_line:

        temp1 = record.date
        print temp1 
        print result
            return result

    _columns = {
        'speaker': fields.boolean('Leader'),
        'event_ids': fields.one2many('event.event','main_speaker_id', readonly=True),
        'event_registration_ids': fields.one2many('event.registration','partner_id', readonly=True),
        'airline': fields.boolean('Airlines'),
        'hotel': fields.boolean('Hotel'),
        'date_birth': fields.date('Date of Birth'),
        'id_no': fields.char('ID. No', size=20),
        'id_expired': fields.date('Expired Date'),
        'sex':fields.selection([('male','Male'),('female','Female')],'Sex'),
        'age' : fields.function(_compute_age, type='float', method=True, store=True, string='Age', readonly=True),
        'deposit': fields.function(_compute_dept2, type='float', method=True, store=True, string='Deposit', readonly=True),
        'available': fields.function(_compute_dept, type='float', method=True, store=True, string='Available', readonly=True),
        'deposit_ids':fields.one2many('deposit.line', 'deposit_id', 'Deposit Line'),

    }

res_partner()
4

2 に答える 2

2

モデルで定義されたone2manyフィールドが あるため、オブジェクトに直接アクセスする必要はありません。deposit_lineres.partnerdeposit_line

def _compute_dept2(self, cr, uid, ids, amount, arg, context=None):
    result = {}
    for partner in self.browse(cr, uid, id, context=context)
        result[partner.id]=0
        for deposit_line in partner.deposit_ids:
            result[partner.id] += deposit_line.amount
    return result
于 2012-07-27T08:18:29.817 に答える
1

3 行目以降で、次のことを忘れていました。

obj2.browse(cr, uid, ids, context=context)

デバッガーの使い方を学ぶ必要があります。

ブレークポイントを配置する行を追加しimport pdb; pdb.set_trace()ます。Python がブレークポイントに到達すると、プロンプトが表示されてコンソールで停止し(pdb)ます。p obj変数 obj を出力nしたり、次の命令に進んだり、ヘルプを求めたりするためにタイプしhます。詳細については、この投稿ドキュメントを参照してください。

于 2012-07-27T07:11:58.830 に答える