如何以整数字段的形式保存空值

我看到了所有这样的线程,阅读文档并尝试了大量的组合来保持空值
IntegerField

在数据库中,每次我都失败了。

我用 MySQL.

My
models.py

指定该字段
age=models.IntegerField//

. 我从文件中填充数据库 csv, 一些细胞无关紧要。 Django 文件说:


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

在数据库中 因此我 /我认为/ 必须添加
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/


每次在数据库中插入空字符串时,我都会得到


ValueError: invalid literal for int// with base 10: ''


猜猜我还能做什么?
已邀请:

风见雨下

赞同来自:

字符串不是整数,而空行不是
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//


https://docs.djangoproject.com ... tions
仅设计检查前景; 它对数据库侧面没有任何影响:

请注意,它不同于
null

.
null

纯的
与数据库相关联
blank

与验证相关联。 如果是这个领域
它有
blank=True

, 验证表单将允许您输入空值。
如果有一个领域
blank=False

, 该字段将是强制性的。

https://docs.djangoproject.com ... tions
另一方面,涉及数据库:

如果一个 True, 那 Django 将存储空值作为 NULL 在数据库中。 默认值为false。


IntegerField

需要可以将值转换为整数的值 , 所以当你通过时

空字符串

, 它无法带来它并导致例外。 相反,如果你通过
None

, 你有
age = models.IntegerField/null=True/

, 他知道要保持正确。

总结:


age = models.IntegerField//


该字段是强制性的,需要允许的整数值。 他不会采取
None

并且不会有值 null 在数据库中。 有效值 - 经过 -53 到 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

在此字段中不是空字符串 "

詹大官人

赞同来自:

您可以覆盖该方法 'clean' 在它的课堂上 form, 然后清理整数数据以避免发送空字符串,请参见下面的示例:


def clean/self/:
self.cleaned_data = super/YourForm, self/.clean//
if self.cleaned_data['age'] == '': self.cleaned_data['age'] = None
return self.cleaned_data

要回复问题请先登录注册