Django Python中的blank=True仍然是必需的。

4
在下面的代码中,一些具有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()

出现了“skill cannot be Null”的错误提示。我在很多模型和函数中都遇到了这个问题,目前的解决方法是在其中填入一些无用的数据。

3个回答

4

null=True 会在数据库中将该列设置为NULL。

blank=True 决定了该字段在表单中是否必填,包括管理员和自定义表单。如果 blank=True,则该字段不是必填项,而如果为False,则该字段不能为空。希望这可以帮到您!


3

在字段定义中添加null=True参数,最好是在执行syncdb之前(或者您可以使用South进行迁移)。

skill = models.ForeignKey(Skill, blank=True, null=True)

哇,这个回答是很久以前写的了。读到“南方”让我感到怀旧。 - KhoPhi

2
对于外键,除了NULL以外,实际上没有其他有效的空白值。在数据库端,你需要输入NULL或某个有效的外键值。
因此,为了允许输入外键值,你还需要添加“null=True”。这将把空白值作为NULL输入到数据库中,如文档所述
然而,对于像“models.String”这样的字段,建议仅使用“blank=True”,因为除了NULL之外还有另一个空白值,即空字符串。这使得你可以在需要时使用NULL,例如区分从未填写过的字段和已经用空白值填写的字段。这种区别很微小,通常不是必需的,但可能会作为要求(尽管在文档中不建议这样做)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接