OpenERP 7 : 如何在创建表单中设置默认日期?
OpenERP 7 : How can I set a default date in a create form?
我是 OpenERP 的新手,Python 我正在尝试在创建表单中设置默认日期,该日期必须是用户使用创建表单后的 28 天。
我最后尝试的是这个:
from datetime import datetime
from datetime import date
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
class sale_order_dates(osv.osv):
_inherit = 'sale.order'
_columns = {
'requested_date': fields.date('Requested Date', help="Date requested by the customer for the sale."),
}
_defaults = {
'requested_date': date.today() + timedelta(days=28),
}
sale_order_dates()
但是如果我打开创建表单,我会收到此错误:
"The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application."
可能是因为我无法在_defaults 中进行操作,但我不知道该怎么做,我尝试过在函数中进行操作,但我对函数还不是很满意。
你对我该怎么做有什么想法吗?
提前致谢
编辑:这是电脑端的错误信息
2015-04-30 19:50:40,217 8666 ERROR Armand werkzeug: Error on request:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi
execute(self.server.app)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 168, in execute
application_iter = app(environ, start_response)
File "/home/odoo/server/7.0/openerp/service/wsgi_server.py", line 417, in application
return application_unproxied(environ, start_response)
File "/home/odoo/server/7.0/openerp/service/wsgi_server.py", line 403, in application_unproxied
result = handler(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 528, in __call__
return self.dispatch(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 487, in __call__
return self.app(environ, start_wrapped)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
return self.app(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 487, in __call__
return self.app(environ, start_wrapped)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
return self.app(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 553, in dispatch
result = handler(request)
File "/home/odoo/web/7.0/addons/web/http.py", line 618, in <lambda>
return lambda request: JsonRequest(request).dispatch(method)
File "/home/odoo/web/7.0/addons/web/http.py", line 251, in dispatch
body = simplejson.dumps(response)
File "/usr/local/lib/python2.7/dist-packages/simplejson/__init__.py", line 370, in dumps
return _default_encoder.encode(obj)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 271, in encode
chunks = list(chunks)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 632, in _iterencode
for chunk in _iterencode_dict(o, _current_indent_level):
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 591, in _iterencode_dict
for chunk in chunks:
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 591, in _iterencode_dict
for chunk in chunks:
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 642, in _iterencode
o = _default(o)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 246, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.date(2015, 5, 28) is not JSON serializable
看来是_defaults中的操作不正确,可能这两个字段也不兼容,但我不知道该用什么。
您的代码将在最新代码中正常运行。但是对于您的问题,您需要 return 日期作为字符串,而不是 ORM 预期格式的日期对象。对您的代码进行以下更改。
from datetime import date
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
class sale_order_dates(osv.osv):
_inherit = 'sale.order'
_columns = {
'requested_date': fields.date('Requested Date', help="Date requested by the customer for the sale."),
}
_defaults = {
'requested_date': (date.today() + timedelta(days=28)).strftime(DEFAULT_SERVER_DATE_FORMAT),
}
sale_order_dates()
在version 8中,我们在字段定义本身中有一个静态方法来处理这个问题。我们只需要做的是
fields.Date.to_string(date_obj)
我是 OpenERP 的新手,Python 我正在尝试在创建表单中设置默认日期,该日期必须是用户使用创建表单后的 28 天。
我最后尝试的是这个:
from datetime import datetime
from datetime import date
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
class sale_order_dates(osv.osv):
_inherit = 'sale.order'
_columns = {
'requested_date': fields.date('Requested Date', help="Date requested by the customer for the sale."),
}
_defaults = {
'requested_date': date.today() + timedelta(days=28),
}
sale_order_dates()
但是如果我打开创建表单,我会收到此错误:
"The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application."
可能是因为我无法在_defaults 中进行操作,但我不知道该怎么做,我尝试过在函数中进行操作,但我对函数还不是很满意。 你对我该怎么做有什么想法吗? 提前致谢
编辑:这是电脑端的错误信息
2015-04-30 19:50:40,217 8666 ERROR Armand werkzeug: Error on request:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi
execute(self.server.app)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 168, in execute
application_iter = app(environ, start_response)
File "/home/odoo/server/7.0/openerp/service/wsgi_server.py", line 417, in application
return application_unproxied(environ, start_response)
File "/home/odoo/server/7.0/openerp/service/wsgi_server.py", line 403, in application_unproxied
result = handler(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 528, in __call__
return self.dispatch(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 487, in __call__
return self.app(environ, start_wrapped)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
return self.app(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 487, in __call__
return self.app(environ, start_wrapped)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
return self.app(environ, start_response)
File "/home/odoo/web/7.0/addons/web/http.py", line 553, in dispatch
result = handler(request)
File "/home/odoo/web/7.0/addons/web/http.py", line 618, in <lambda>
return lambda request: JsonRequest(request).dispatch(method)
File "/home/odoo/web/7.0/addons/web/http.py", line 251, in dispatch
body = simplejson.dumps(response)
File "/usr/local/lib/python2.7/dist-packages/simplejson/__init__.py", line 370, in dumps
return _default_encoder.encode(obj)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 271, in encode
chunks = list(chunks)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 632, in _iterencode
for chunk in _iterencode_dict(o, _current_indent_level):
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 591, in _iterencode_dict
for chunk in chunks:
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 591, in _iterencode_dict
for chunk in chunks:
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 642, in _iterencode
o = _default(o)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 246, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.date(2015, 5, 28) is not JSON serializable
看来是_defaults中的操作不正确,可能这两个字段也不兼容,但我不知道该用什么。
您的代码将在最新代码中正常运行。但是对于您的问题,您需要 return 日期作为字符串,而不是 ORM 预期格式的日期对象。对您的代码进行以下更改。
from datetime import date
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
class sale_order_dates(osv.osv):
_inherit = 'sale.order'
_columns = {
'requested_date': fields.date('Requested Date', help="Date requested by the customer for the sale."),
}
_defaults = {
'requested_date': (date.today() + timedelta(days=28)).strftime(DEFAULT_SERVER_DATE_FORMAT),
}
sale_order_dates()
在version 8中,我们在字段定义本身中有一个静态方法来处理这个问题。我们只需要做的是
fields.Date.to_string(date_obj)