Django: Консоль возвращает «значение должно быть десятичным числом» в определенном CharField поле? - PullRequest
0 голосов
/ 03 мая 2019

Верно ..... так что я запутался в этом.Функция кода, на которой была основана эта ошибка, состоит в том, что пользователь отправляет файл csv, полный указанных данных.Django будет обрабатывать данные и добавлять отправленные данные в базу данных MySQL.Посреди отладки некоторых ошибок обработки и обеспечения соответствия всех моих определенных списков с порядком заголовка файла csv и всеми, функция Django Model.save () не будет работать.И поэтому я включил исключения и распечатал их на консоль, где я получаю это как ошибку:

РЕДАКТИРОВАТЬ: Обновление этого значения до значения результата реальной ошибки:

[u"'F1216-07a' value must be a decimal number."]

Где 'значение1'- значение данных, которое будет введено в определенное поле CharField.Мой файл models.py определен как строка, а в таблице базы данных MySQL через PHPMyAdmin это поле определено как char (N).Я предполагаю, что вот определение модели поля в качестве ссылки:

x_version = models.CharField(choices=X_VERSION_CHOICES, max_length=32, blank=True, verbose_name='By X Field Version')

А вот примерное определение вариантов:

X_VERSION_CHOICES = (
    ('value1', 'value1'),
    ('value2', 'value2'),
)

Значения для этого поля должны быть одним изпредопределенный выбор строки, поэтому нет никакой возможности изменить это значение на десятичное значение.Зачем Django показывать эту ошибку, когда определенный тип верен?Будет ли это из-за того, как константы выбора определены как?

РЕДАКТИРОВАТЬ: я думал, что это не требует пояснений, но вот пример кода, где происходит сбой метода model.Save ().

try:
     ....

     # Value in this reconciliation_required db field must be set as
     # "1" for true, which in test file it is.
     if contracts[line['contract_no']].reconciliation_required:

            # pass SampleDesignParameters the parameter dictionary and 
            # create line_parameters
            line_parameters = SampleDesignParameters(**para_dict)
            line_parameters.contract = contracts[line['contract_no']]
            line_parameters.name = 'Auto-Created'
            line_parameters.save()
            line_sample.parameters = line_parameters

 except Exception as e:
     print e
     # .... more code that generates warnings here

Где para_dict - это словарь с ключами в качестве базы данных с именованными полями, а его значения - это данные, которые пользователь вводит для этого поля.Я напечатал dict на консоли, поэтому для полей ключа и данных все они выстраиваются соответственно.А что касается самой модели, ее ...

class SampleDesignParameters(DesignParameters):
    parent_template = models.ForeignKey('DesignParameters', related_name='parent', blank=True, null=True)

...

class DesignParameters(models.Model):
    id = models.AutoField(primary_key=True)
    ....

    # This field that Django has errors saving on:
    f1216_version = models.CharField(choices=F1216_VERSION_CHOICES, max_length=32, blank=True, verbose_name='BY ASTM F1216 VERSION')

....

И соответствующих констант для этого поля, которые в основном имеют тот же формат, что и фиктивная:

F1216_VERSION_CHOICES = (
    ('F1216-07a', 'F1216-07a'),
    ('F1216-09', 'F1216-09'),
)

1 Ответ

0 голосов
/ 04 мая 2019

Наиболее вероятное объяснение состоит в том, что каким-то образом это значение сохраняется в неправильном поле модели.Можете ли вы поймать ошибку и проверить значения?Или, возможно, в CSV имеется вероятное поле и, возможно, неверная строка с отсутствующим значением, поэтому они смещены.

...