django python blank = True仍然需要

时间:2013-12-03 16:23:47

标签: python django field

在下面的代码中,某些地方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。我有很多模型和功能,到目前为止我只是在其中丢弃了一些无用的数据。

3 个答案:

答案 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在您想要的地方使用,例如,区分从未填充过的字段,以及用空白值填充的字段。区别很小,通常没有必要,但可以作为一项要求(虽然文档中不推荐)。