在下面的代码中,某些地方blank=True
字段仍然是必需的,不能是Null
示例:
# Skill train timer
class SkillTrainingTimer(models.Model):
"""
Character Training timer, keep track fo what skill is in training, and when it is done
"""
character = models.ForeignKey(Character, unique=True)
skill = models.ForeignKey(Skill, blank=True)
trainingground = models.ForeignKey(TrainingGround, verbose_name='Training ground')
timer = models.DateTimeField()
现在我做了:
train_skill = SkillTrainingTimer(
character=some_character_obj,
trainingground=some_trainingground_obj,
timer = fatetime.datetime.now()
)
train_skill.save()
它开始抱怨技能不能是Null
。我有很多模型和功能,到目前为止我只是在其中丢弃了一些无用的数据。
答案 0 :(得分:3)
null=True
在数据库中的列上设置NULL。
blank=True
确定表单中是否需要该字段。这包括管理员和您自己的自定义表单。如果blank=True
则不需要该字段,而如果该字段为False则该字段不能为空。希望这有帮助!
答案 1 :(得分:2)
您必须在字段定义中添加null=True
参数,最好在syncdb之前(或者您可以使用South迁移)
skill = models.ForeignKey(Skill, blank=True, null=True)
答案 2 :(得分:2)
对于外键,除了NULL之外,实际上没有有效的空值。实际上,在数据库端,您需要输入NULL或该外键的某个有效值。
因此,要允许输入外键,您还需要添加null=True
。这会将NULL
的空白值输入数据库as specified in the documentation。
但是,对于像blank=True
这样的字段,建议使用简单的models.String
,其中除了NULL
之外还有另一个空值,即空字符串。这允许您使用NULL
在您想要的地方使用,例如,区分从未填充过的字段,以及用空白值填充的字段。区别很小,通常没有必要,但可以作为一项要求(虽然文档中不推荐)。