по какой-то таинственной причине при сохранении модели для полей устанавливается None - PullRequest
0 голосов
/ 05 февраля 2020

Я получаю объект 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) ... все работает правильно, поэтому проблема в этом методе. С другой стороны, он никогда не достигает кода ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...