Create() в Django выдает мне ValueError "Поле 'width' ожидало число, но получило 'NA'".

Я пытаюсь вставить несколько строк из .csv файла в SQLite в Django. Я не хочу использовать import_data(), потому что я хотел бы иметь более детальный контроль для каждой вставки. Моя модель выглядит примерно так:

class Box(models.Model):
    name = models.CharField(max_length=30)
    color = models.CharField(max_length=30)
    size = LengthField(blank=True, null=True, default=None, decimal_places=2,validators=(MinValueValidator(0, field_type='Length'),MaxValueValidator(100, field_type='Length'))))

Только имя имеет ограничение на уникальность. Теперь, когда я запускаю get_or_create и имею строку csv, в которой есть пробел для размера, я получаю ошибку "ValueError - Field 'size' expected a number but gets 'NA'". (Для строк csv до этого все вставляется правильно)

Мне кажется это странным, потому что в модели у меня есть blank=True и null=True для размера. Что я могу делать неправильно и как это исправить? Спасибо заранее!

Вы пытаетесь передать строку 'NA' в качестве значения для поля size, следовательно, это не работает. В логике, которую вы используете для создания объектов модели, вы должны заменить его на None, так что что-то похожее на:

name = …
color = …
size = …

#  ↓ replace 'NA' with None
if size == 'NA':
    size = None

Box.objects.get_or_create(
    name=name,
    defaults={'color': color, 'size': size}
)
Вернуться на верх