【发布时间】:2021-11-26 14:57:01
【问题描述】:
这是我在 Odoo13 中编写的第一个创建函数。我想得到 begin_date 和 end_date 两个日期之间的时间段,日期应保存在列表中。从这个列表中,我想为列表中的每一天为单个员工创建记录。但我的代码似乎不正确,我收到这种错误:AttributeError: 'NoneType' object has no attribute 'id'
这是我的代码:
from datetime import timedelta, datetime, date
from calendar import monthrange
from odoo import api, fields, models, tools
from odoo.exceptions import UserError, AccessError, ValidationError
from odoo.tools import date_utils
class TimeOff(models.Model):
_name = 'project.timeoff'
_rec_name = 'employ_id'
employ_id = fields.Many2one('hr.employee', string='Employee', required='1')
date = fields.Date('Date', required=True, index=True,
default=fields.Date.context_today)
begin_date = fields.Datetime(
'First Day of Leave', required='1')
day_hours = fields.Integer('Off hours per day', default='8', required='1')
end_date = fields.Datetime(
'Last Day of Leave')
###### create function #######
@api.model
def create(self, vals):
range_date = [] # empty list
if self.employ_id: # check if field has value
if self.begin_date and self.end_date: # check if field has value
range_date = self.calc_dates(
self.begin_date, self.end_date, mode='date') # call custom function and expect a list to be returned
if range_date is None:
raise ValidationError("Something went wrong") # list is empty
else: # iterate through list and create record for each date
for day in range_date:
vals = {
'employ_id': self.employ_id,
'begin_date': day}
return super(TimeOff, self).create(vals)
### custom function to get all dates between begin_date and end_date #####
def calc_dates(self, date1, date2, mode='date'):
date_from = fields.Date.from_string(date1)
date_to = fields.Date.from_string(date2)
delta = date_to - date_from
if delta.days < 0:
return None
dates = []
for n in range(delta.days + 1):
if mode == 'date': # returns dates as date format
dates.append(date_from + timedelta(days=n))
if mode == 'string': # returns dates as string format
dates.append(fields.Date.to_string(
date_from + timedelta(days=n)))
return dates
所以当我按下创建时,我得到了这个错误:
Error:
Odoo Server Error
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 624, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/usr/lib/python3/dist-packages/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/usr/lib/python3/dist-packages/odoo/http.py", line 669, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 915, in __call__
return self.method(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1327, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1319, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 385, in call_kw
result = _call_kw_model_create(method, model, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 366, in _call_kw_model_create
return result.id if isinstance(args[0], Mapping) else result.ids
AttributeError: 'NoneType' object has no attribute 'id'
要么我不能在这个问题中使用 self 要么返回有问题
【问题讨论】:
标签: python date odoo record odoo-13