要求是当我们输入purchase Date (如06/01/2020)和month (如14)时。
它将从购买日期开始计算到期日,因此warranty_expires_on Date (如07/31/2021)。
我在版本13中添加了字段,即
purchase_date=fields.Date(string="Purchase Date")
warranty_period=fields.Integer(string="Warranty Period")
warranty_expires_on=fields.Date(string="Warranty Expires on",compute="_get_date",store=True)
unit_of_time = fields.Selection([
(YEARLY, 'Years'),
(MONTHLY, 'Months'),
(WEEKLY, 'Weeks')])
count = fields.Integer(string="Number of ranges to generate", required=True,default=1)
@api.depends('purchase_date','warranty_period')
def _get_date(self):
for rec in self:
vals = rrule(freq=rec.unit_of_time,
interval=rec.warranty_period,
dtstart=rec.purchase_date,
count=rec.count+1)
vals = list(vals)
for idx, dt_start in enumerate(vals[:-1]):
purchase_date = dt_start.date()
warranty_expires_on = vals[idx+1].date() - relativedelta(days=1)
rec.update({'warranty_expires_on':warranty_expires_on})从xml方面来说...
<xpath expr="//field[@name='warranty_period']" position="after">
<field name="unit_of_time"/>
</xpath>
<xpath expr="//field[@name='unit_of_time']" position="after">
<field name="count" invisible='1'/>
</xpath>但是我面临着下面的错误。
Odoo Server Error
Traceback (most recent call last):
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 619, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 309, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/home/yash/Workspace/odoo_13/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 664, in dispatch
result = self._call_function(**self.params)
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 345, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/yash/Workspace/odoo_13/odoo/service/model.py", line 93, in wrapper
return f(dbname, *args, **kwargs)
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 338, in checked_call
result = self.endpoint(*a, **kw)
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 909, in __call__
return self.method(*args, **kw)
File "/home/yash/Workspace/odoo_13/odoo/http.py", line 510, in response_wrap
response = f(*args, **kw)
File "/home/yash/Workspace/odoo_13/addons/web/controllers/main.py", line 1319, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/home/yash/Workspace/odoo_13/addons/web/controllers/main.py", line 1311, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/yash/Workspace/odoo_13/odoo/api.py", line 395, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/home/yash/Workspace/odoo_13/odoo/api.py", line 382, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/yash/Workspace/odoo_13/odoo/models.py", line 6062, in onchange
for name in nametree
File "/home/yash/Workspace/odoo_13/odoo/models.py", line 6063, in <listcomp>
if name not in done and snapshot0.has_changed(name)
File "/home/yash/Workspace/odoo_13/odoo/models.py", line 5930, in has_changed
return self[name] != record[name]
File "/home/yash/Workspace/odoo_13/odoo/models.py", line 5589, in __getitem__
return self._fields[key].__get__(self, type(self))
File "/home/yash/Workspace/odoo_13/odoo/fields.py", line 973, in __get__
self.compute_value(recs)
File "/home/yash/Workspace/odoo_13/odoo/fields.py", line 1087, in compute_value
records._compute_field_value(self)
File "/home/yash/Workspace/odoo_13/odoo/models.py", line 3905, in _compute_field_value
getattr(self, field.compute)()
File "/home/yash/Workspace/project13/equipment_allocations_app/models/maintenance.py", line 68, in _get_date
count=rec.count+1)
File "/usr/local/lib/python3.6/dist-packages/dateutil/rrule.py", line 619, in __init__
if freq < HOURLY:
TypeError: '<' not supported between instances of 'str' and 'int'发布于 2020-06-02 01:38:46
rrule freq参数必须是年、月、周、日、小时、分钟或秒之一。
(YEARLY,
MONTHLY,
WEEKLY,
DAILY,
HOURLY,
MINUTELY,
SECONDLY) = list(range(7))freq必须在list(range(7))中
>>> from dateutil.rrule import MONTHLY
>>> MONTHLY
1如果您尝试在选择的类型中使用不同于str的值,Odoo将引发错误,
AssertionError: Field purchase.order.unit_of_time with non-str value in selection - - -使用选择值获取整数频率
示例
from dateutil.rrule import rrule, YEARLY, MONTHLY, WEEKLY
unit_of_time = fields.Selection([
(str(YEARLY), 'Years'),
(str(MONTHLY), 'Months'),
(str(WEEKLY), 'Weeks')])调用rrule时将unit_of_time转换为int
freq=int(rec.unit_of_time)https://stackoverflow.com/questions/62132534
复制相似问题