3

ウィジェット「float_time」で float フィールドを使用して時間を表示しました。datetime を float に変換してウィジェットに正しく表示するにはどうすればよいですか?

私のシナリオをもう少し説明します。

日時であるフィールド「start_date」があります。イベント「on_change」で、ウィジェット「float_time」を持つフロートタイプの別のフィールドに時間値を設定したいと考えています。

 'start_date': fields.datetime('Fecha Inicio' , required = True),
 'h_inicio': fields.float('Hora inicio', help="Hora inicio" , required = True),

ビューで :

<field name="start_date" on_change="onchange_f_inicio(start_date)"/>
<field name="h_inicio" widget="float_time"/>

メソッド on_change

    def onchange_f_inicio(self, cr, uid, ids ,fecha_inicio):
        res = {'value':{}}
        fecha_ini = datetime.strptime(fecha_inicio, "%Y-%m-%d %H:%M:%S")

       user = self.pool.get('res.users').browse(cr, uid, uid)
       tz = pytz.timezone(user.tz) if user.tz else pytz.utc
       fecha_ini = pytz.utc.localize(fecha_ini).astimezone(tz)     # convert start in user's timezone           

        hora_inicio = "%s.%s" % (str(fecha_ini.hour) , str(fecha_ini.minute))       
        res['value']['h_inicio'] =  round(float(hora_inicio),1)

    return res

機能する唯一の方法は、日付「start_date」を文字列に変換してから、メソッド on_change によって返される値になるように float に変換することです。

より良い感謝の気持ちを伝える方法を作るお手伝いができれば、このフォームは最善だとは思いません。

ありがとう

4

1 に答える 1

1

1 つの小さなバグを除いて、あなたが持っているコードは良好です。

hora_inicio = "%s.%s" % (str(fecha_ini.hour) , str(fecha_ini.minute))

する必要があります

hora_inicio = "%s.%s" % (str(fecha_ini.hour) , str(fecha_ini.minute // 60))

30 分 = 0.5(ではない0.3)

于 2013-11-20T18:43:36.490 に答える