콘텐츠로 건너뛰기
메뉴
커뮤니티에 참여하려면 회원 가입을 하시기 바랍니다.
신고된 질문입니다
1 회신
1462 화면
  File "/home/gowtham.a/workspace/odoo-18.0/odoo/models.py", line 6880, in __getitem__
    return self._fields[key].__get__(self)
  File "/home/gowtham.a/workspace/odoo-18.0/odoo/fields.py", line 1296, in __get__
    raise ValueError(f"Compute method failed to assign {missing_recs}.{self.name}")
ValueError: Compute method failed to assign account.move(2,).exchange_rate


class AccountMove(models.Model):   
_inherit = "account.move"

attn = fields.Many2one('res.partner',string="ATTN")
customer_po_no = fields.Char(string="Customer PO No.")
do_name = fields.Char(string="DO No.")
exchange_rate = fields.Float(string="Rate",digits=(12,4),compute="_compute_currency_rate")


def _compute_currency_rate(self):
for mov in self:
if mov.currency_id:

if mov.company_id.country_id.code != 'SG':
currency_id_rates = self.env['res.currency.rate'].search([('currency_id','=',mov.currency_id.id),('company_id','=',mov.company_id.id)])
for currency_id_rate in currency_id_rates:
if currency_id_rate.name == mov.invoice_date:

mov.exchange_rate = currency_id_rate.rate
break
else:
if mov.invoice_date and currency_id_rate.name:
if currency_id_rate.name.month == mov.invoice_date.month and currency_id_rate.name.year == mov.invoice_date.year:
mov.exchange_rate = currency_id_rate.rate
break
else:
mov.exchange_rate = currency_id_rate.rate
else:
mov.exchange_rate = currency_id_rate.rate
break
else:
currency_id_rates = self.env['res.currency.rate'].search([('currency_id','=',mov.currency_id.id),('company_id','=',mov.company_id.id)])
for currency_id_rate in currency_id_rates:
if currency_id_rate.name == mov.invoice_date:
mov.exchange_rate = 1 / currency_id_rate.rate
break
else:
if mov.invoice_date and currency_id_rate.name:
if currency_id_rate.name.month == mov.invoice_date.month and currency_id_rate.name.year == mov.invoice_date.year:
mov.exchange_rate = 1 / currency_id_rate.rate
break
else:
mov.exchange_rate = 1 / currency_id_rate.rate
else:
mov.exchange_rate = 1 / currency_id_rate.rate
break

아바타
취소
베스트 답변

Probably it happens, because this compute field is left unassigned from your function. So better to add some default value to avoid unassigned cases such as or make sure it is never left unassigned by modifying your function:

def _compute_currency_rate(self):
    for mov in self:
        mov.exchange_rate = 1.0  # Default value to avoid unassigned cases
​....
아바타
취소
관련 게시물 답글 화면 활동
2
4월 25
1375
0
11월 24
836
0
8월 25
7
1
8월 25
119
1
8월 25
201