Вот поля моего класса и моей функции вычисления:
half_pension = fields.Boolean(string='School catering', copy=False)
half_pension_begin_date = fields.Date(string='Start date school catering', copy=False)
half_pension_end_date = fields.Date(string='End date school catering', copy=False)
half_pension_id = fields.Many2one(comodel_name="ecole.halfpension.school", string="Restoration Place")
half_pension_days_value = fields.Integer(string='Days value', copy=False, store=True)
half_pension_binary_value = fields.Char(string='Binary value', copy=False, store=True)
half_pension_monday = fields.Boolean(string='Monday', copy=False, store=False, compute='convert_bin_dec')
half_pension_tuesday = fields.Boolean(string='Tuesday', copy=False, store=False, compute='convert_bin_dec')
half_pension_wednesday = fields.Boolean(string='Wednesday', copy=False, readonly="1")
half_pension_thursday = fields.Boolean(string='Thursday', copy=False, store=False, compute='convert_bin_dec')
half_pension_friday = fields.Boolean(string='Friday', copy=False, store=False, compute='convert_bin_dec')
# Function that converts to binary and synchronize a value in binary and days of the week
@api.depends('half_pension_days_value')
@api.onchange('half_pension',
'half_pension_monday',
'half_pension_tuesday',
'half_pension_thursday',
'half_pension_friday')
def convert_bin_dec(self):
for record in self:
if record.half_pension:
if record.half_pension_days_value != 0:
print "J'ai un nombre décimal"
# On transforme le total en valeur binaire (deviens string)
values = dec2bin(record.half_pension_days_value, 7)
record.half_pension_binary_value = values
list_values = []
for lettre in values:
list_values.append(lettre)
print list_values
# # On sépare dans des variables nos valeurs
if list_values[6] != '0':
record.half_pension_monday = True
else:
record.half_pension_monday = False
if list_values[5] != '0':
record.half_pension_tuesday = True
else:
record.half_pension_tuesday = False
if list_values[4] != '0':
record.half_pension_wednesday = True
else:
record.half_pension_wednesday = False
if list_values[3] != '0':
record.half_pension_thursday = True
else:
record.half_pension_thursday = False
if list_values[2] != '0':
record.half_pension_friday = True
else:
record.half_pension_friday = False
# on récupère les valeur booleenne pour chaque enregistrement
value_monday = record.half_pension_monday
value_tuesday = record.half_pension_tuesday
value_thursday = record.half_pension_thursday
value_friday = record.half_pension_friday
# On assigne une valeur si c'est True ou False à chaque jours
if value_monday:
monday_decimal = 1
else:
monday_decimal = 0
if value_tuesday:
tuesday_decimal = 2
else:
tuesday_decimal = 0
if value_thursday:
thursday_decimal = 8
else:
thursday_decimal = 0
if value_friday:
friday_decimal = 16
else:
friday_decimal = 0
# On fait le total
total_decimal = monday_decimal + tuesday_decimal + thursday_decimal + friday_decimal
record.half_pension_days_value = total_decimal
# On transforme le total en valeur binaire (deviens string)
values = dec2bin(total_decimal, 7)
record.half_pension_binary_value = values
# On met le statut de l'inscription a 2 pour l'inscription cantine
record.status_ws = "2"
else:
record.half_pension_days_value = 0
record.half_pension_binary_value = "0000000"
record.status_ws = "3"
Функция почти завершена.Это работает.
Проблема в том, что с одной стороны я хочу вычислить значения моих логических значений (на основе десятичного числа, зарегистрированного в базе в поле "half_pension_days_value") и, наоборот, вычислилзначение поля "half_pension_days_value" согласно проверенному логическому значению.
В настоящее время мой код работает, если я выбираю значение.Это также сработало, когда я поставил галочку в будние дни (но не остался, когда вернулся, чтобы отредактировать свою запись).Если я просто использую декоратор onchange ('half_pension_days_value'), мои булевы дни недели по-прежнему имеют значение False.
Вот изображение, которое лучше понять:
Пример. В настоящее время, если я изменю значение дней на 3, будут проверяться понедельник и вторник.Это хорошо, за исключением того, что я хотел бы проверить это сам (в настоящее время только для чтения).Я не знаю, если я достаточно ясно, не стесняйтесь, дайте мне знать.
сердечно