如何为Django ForeignKey字段指定默认值?

Pau*_*ite 6 django django-models

我正在尝试ForeignKey使用South向Django模型添加一个字段.我收到以下错误:

ValueError: You cannot add a null=False column without a default value.
Run Code Online (Sandbox Code Playgroud)

事实上,我确实为该字段指定了默认值,但我不确定我是否正确执行了该操作.

language = models.ForeignKey(Language, default=Language.objects.all()[0])
Run Code Online (Sandbox Code Playgroud)

这有用吗?

rad*_*ous 8

AFAIK Django不会执行作为参数传递的QuerySet,即使它仅限于一个元素.你应该试试这篇文章中提出的建议

class Foo(models.Model):
    a = models.CharField(max_length=10)

def get_foo():
    return Foo.objects.get_or_create(id=1)

class Bar(models.Model):
    b = models.CharField(max_length=10)
    a = models.ForeignKey(Foo, default=get_foo)
Run Code Online (Sandbox Code Playgroud)

  • 假设唯一的要点是使用`id`以外的其他东西进行查询,这实际上是行不通的。这是因为查询是在创建迁移之前运行的,并且将生成的`id'硬编码到迁移中。因此,如果以后运行迁移的任何人都为所需记录使用了不同的`id`,则他们仍将获得您的`id`,而不是在数据库上运行查询,因此将获得随机默认值。 (2认同)