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 =客户出售),
}
_defaults = {
'requested_date':date.today()+ timedelta(days = 28),
}
sale_order_dates()
但是,如果我打开创建表单,我得到此错误:
服务器遇到内部错误,无法合并请你的请求服务器超载或应用程序中有错误。
这可能是因为我无法在_defaults中进行操作,但是我不知道什么要做,我已经尝试使一个功能的操作,但我不是很舒服的功能
你有什么想法,我可以如何做吗?
提前感谢
编辑:这是计算机终端上的错误消息
2015- 04-30 19:50:40,217 8666错误Armand werkzeug:请求时出错:
追溯(最近的最后一次呼叫):
文件/usr/local/lib/python2.7/dist-packages/ werkzeug / serving.py,第180行,在run_wsgi
execute(self.server.app)
文件/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py ,行168,执行
application_iter = app(environ,start_response)
文件/home/odoo/server/7.0/openerp/service/wsgi_server.py,第417行,应用程序
return application_unproxied(environ,start_respo nse)
文件/home/odoo/server/7.0/openerp/service/wsgi_server.py,第403行,在application_unproxied
result = handler(environ,start_response)
文件/ home / odoo / web / 7.0 / addons / web / http.py,第528行,__call__
return self.dispatch(environ,start_response)
文件/home/odoo/web/7.0/ addons / web / http.py,第487行,__call__
return self.app(environ,start_wrapped)
文件/usr/local/lib/python2.7/dist-packages/werkzeug/ wsgi.py,第591行,__call__
return self.app(environ,start_response)
文件/home/odoo/web/7.0/addons/web/http.py,第487行, in __call__
return self.app(environ,start_wrapped)
文件/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py,第591行,__call__
return self.app(environ,start_response)
文件/home/odoo/web/7.0/addons/web/http.py,第553行,调度
result = handler(request)
文件/home/odoo/web/7.0/addons/web/http.py,第618行,在< lambda>
返回lambda请求:JsonRequest(请求).dispatch(方法)
文件/home/odoo/web/7.0/addons/web/http.py,行251,在调度
body = simplejson.dumps(response)
文件/usr/local/lib/python2.7/dist-packages/simplejson/__init__.py,第370行转储
return _default_encoder.encode( obj)
文件/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py,第271行,编码
chunks = list(chunks)
文件/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py,第632行,在_iterencode
中的_iterencode_dict(o,_current_indent_level)中的块:
文件/ usr /local/lib/python2.7/dist-packages/simplejson/encoder.py,第591行,在_iterencode_dict
块中的块:
文件/usr/local/lib/python2.7 /dist-packages/simplejson/encoder.py,第591行,在_iterencode_dict
块中的块:
文件/usr/local/lib/python2.7/dist-packages/simplejson/encoder .py,第642行,在_iterencode
o = _default(o)
文件/ usr / local / lib /python2.7/dist-packages/simplejson/encoder.py,第246行,默认
raise TypeError(repr(o)+不是JSON可序列化)
TypeError:datetime.date 2015,5,28)不是JSON可序列化
所以看起来像是_defaults中的操作是不正确的,也许两个字段也不兼容,但我不知道应该使用什么。
p>您的代码可以在最新的代码中正常运行。但是,对于您的问题,您需要以ORM的预期格式将日期作为字符串返回,而不是日期对象。对代码进行以下更改。
从datetime导入日期
从datetime导入timedelta
from dateutil来自openerp.osv导入字段的.relativedelta import relativedelta
来自openerp.tools的osv
import DEFAULT_SERVER_DATE_FORMAT
class sale_order_dates(osv.osv):
_inherit ='sale.order'
_columns = {
'requested_date':fields.date('Requested Date',help =客户要求销售的日期。),
}
_defaults = {
'requested_date':(date.today()+ timedelta(days = 28))。strftime(DEFAULT_SERVER_DATE_FORMAT),
sale_order_dates()
在第8版,我们在字段定义本身有一个静态方法来处理这个问题。我们只需要做的是
fields.Date.to_string(date_obj)
/ pre>
I am new to OpenERP and Python and I am trying to set a default date in a create form which has to be 28 days after when the user is using the create form.
The last thing I've tried is this :
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()
But then if I open the create form I get this error :
"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."
It is probably because I can't make operations in _defaults but then I don't know what to do, I've tried to make the operation in a function but I am not very comfortable with functions yet. Do you have any ideas of how I could do it please ? Thanks in advance
Edit : This is the error message on the computer terminal
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
So it looks like it is the operation in _defaults that is incorrect, maybe the two fields aren't compatible with each other too, but I don't know what I should use.
解决方案Your code will work fine in the latest code. But for your issue you need to return the date as string, not date object in the format expected by the ORM. Make a following change to your code.
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()
In version 8, we have a static method in the field definition itself to handle this issue. We only need to do is
fields.Date.to_string(date_obj)
这篇关于OpenERP 7:如何在创建表单中设置默认日期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!