Как сохранить пустое значение как Integerfield

Я видел все подобные потоки, читал документы и пытался использовать множество комбинаций для хранения пустого значения в качестве IntegerField в db и не IntegerField каждый раз.

Я использую MySQL.

My models.py определяет поле age=models.IntegerField() . Я заполняю db из файла csv, а некоторые ячейки не имеют значения. Django docs говорит:

 Field.null If True, Django will store empty values as NULL in the database. Default is False. Note that empty string values will always get stored as empty strings, not as NULL. 

Поскольку я работаю с IntegerField я хочу, чтобы пустая строка (пустая ячейка из csv) хранилась как NULL в db. Поэтому я (думаю) должен добавить null=True в поле age . На самом деле, я пробовал больше, чем это:

 age=models.IntegerField() age=models.IntegerField(null=True) age=models.IntegerField(null=True, blank=True) age=models.IntegerField(null=True, blank=True, default=None) 

и каждый раз, когда я вставляю пустую строку в db, я получил

 ValueError: invalid literal for int() with base 10: '' 

Кто-нибудь догадывается, что еще я могу сделать?

  • Проверьте, существует ли строка в одном кадре данных в другом кадре данных
  • python с API Quickbooks Online v3
  • pyQT QNetworkManager и ProgressBars
  • импортировать внутри потока Python
  • TypeError: объект «float» не может быть вызван
  • Может ли запись в UDP-сокет когда-либо блокироваться?
  • Как правильно вводить пользователя, пока я не захочу выйти?
  • Ошибка обратной записи Django: NoReverseMatch
  • 2 Solutions collect form web for “Как сохранить пустое значение как Integerfield”

    Строка не является целым числом; и пустая строка не равна None или NULL . Что вам нужно сделать, это поймать те экземпляры, где поле пусто, а затем передать его в None .

     foo = "something" # "something" is coming from your CSV file try: val = int(foo) except ValueError: # foo is something that cannot be converted to # a number. It could be an empty string, or a # string like 'hello' # provide a default value val = None # Now use val to insert into the database f = MyModel() f.age = val f.save() 

    blank – это строго для проверки переднего конца; это не влияет на сторону базы данных:

    Обратите внимание, что это отличается от null . null – это чисто связанный с базой данных, в то время как blank – связанный с проверкой. Если поле имеет blank=True , проверка формы позволит ввести пустое значение. Если поле имеет blank=False , поле будет необходимо.

    null с другой стороны, имеет отношение к базе данных:

    Если True, Django будет хранить пустые значения как NULL в базе данных. Значение по умолчанию – False.

    IntegerField требует значения, которое может быть преобразовано в целое число, поэтому, когда вы передаете пустую строку , она не может использовать ее и вызывает исключение. Вместо этого, если вы передаете None , и у вас есть age = models.IntegerField(null=True) , он знает, что нужно хранить его правильно.

    Обобщить:

    • age = models.IntegerField()

      Поле требуется и требует действительного целочисленного значения. Он не будет принимать None и не будет иметь нулевых значений в базе данных. Допустимые значения: от -2147483648 до 2147483647

    • age = models.IntegerField(null=True)

      Поле обязательное (проверка формы). Если поле имеет None в качестве значения, оно будет переведено в NULL в базе данных.

    • age = models.IntegerField(blank=True, null=True)

      Поле не требуется (проверка формы). Если поле передано в None , оно будет переведено в NULL

    • age = models.IntegerField(blank=True)

      Поле не требуется (проверка формы), но допустимое целочисленное значение необходимо передать, поскольку база данных не принимает значение null. Обычно здесь вы указываете значение по умолчанию со значением по default=0 или выполняете некоторую проверку перед отправкой значения в orm.

    Попробуйте передать None в это поле, а не пустую строку ''

    Python - лучший язык программирования в мире.