OpenERP 7:如何在创建表单中设置默认日期? [英] OpenERP 7 : How can I set a default date in a create form?

查看:811
本文介绍了OpenERP 7:如何在创建表单中设置默认日期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆