Я получаю объект match
из базы данных и настраиваю его поля asian_1
, asian_2
и ahline
.
Я ясно вижу, что эти три переменные не являются None ( поля отсутствуют). Но, тем не менее, объект никогда не изменяет эти атрибуты на значения переменных.
Я называю там один метод, который, когда комментируется, все работает нормально. Но проблема в том, что этот метод не должен вызывать таких проблем.
Это часть кода:
asian_1, asian_2, ahline = Decimal(asian_1), Decimal(asian_2), Decimal(ahline) # Not none decimal numbers
if any([asian_1, asian_2, ahline]):
self.logger.info('saving')
match = Match.objects.get(pk=response.meta['id'])
match.asian_1 = asian_1
match.asian_2 = asian_2
match.ahline = ahline
match.save()
И Match.save
:
def save(self, **kwargs):
self._convert_nans_to_nones()
super().save(**kwargs)
def _convert_nans_to_nones(self):
for field in self._meta.get_fields():
val = getattr(self, field.name, None)
if isinstance(val, decimal.Decimal):
if val.is_nan():
setattr(self, field.name, None) # debugger never reaches this line!!!!
Метод _convert_nans_to_nones
просто проверяет все поля перед сохранением, чтобы убедиться, что Decimal('NAN')
значений не будет. Когда я комментирую этот метод, все сохраняется правильно.
Но когда этот метод вызывается, все значения (asian_1 ...) равны None.
НО! Я думаю, что эта строка никогда не достигается (используя отладчик и ведение журнала): setattr(self, field.name, None)
.
Я действительно не могу понять, что здесь происходит. У вас есть идеи?
РЕДАКТИРОВАТЬ:
Когда я комментирую все под val = getattr (self, decimal.Decimal) ... все работает правильно, поэтому проблема в этом методе. С другой стороны, он никогда не достигает кода ...