如何指定 DjangoForeignKey 字段的默认值?
我正在尝试使用 South 将 ForeignKey
字段添加到 Django 模型中。我收到以下错误:
ValueError:您无法添加没有默认值的 null=False 列。
事实上,我确实为该字段指定了默认值,但我不确定我做得是否正确。
language = models.ForeignKey(Language, default=Language.objects.all()[0])
这应该有效吗?
I’m trying to add a ForeignKey
field to a Django model using South. I’m getting the following error:
ValueError: You cannot add a null=False column without a default value.
I did, in fact, specify a default value for the field, but I’m not sure I did it correctly.
language = models.ForeignKey(Language, default=Language.objects.all()[0])
Should this work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
AFAIK Django 不会执行作为参数传递的查询集,即使它仅限于一个元素。您应该尝试类似本文
AFAIK Django won't execute a QuerySet passed as a param, even if it's limited to one element. You should try something like proposed in this post
因为
get_or_create
返回一个元组,所以我认为这是一个比这个更好的解决方案
Because
get_or_create
returns a tuple, I think this is a better solutionthan this
这实际上是@radious 答案的扩展。你也可以在默认情况下使用 lambda,如果你想删除代码行
,请注意你必须在 get_or_create() 上使用索引 0,因为该方法返回一个元组,所以你需要获取对象,而不是元组。
https://docs.djangoproject.com/en/ 1.6/ref/models/querysets/#get-or-create
This is really an extension to @radious answer. You can also use lambda in the default, if you're looking to cut out lines of code
note that you have to use index 0 on get_or_create() because the method returns a tuple, so you need to get the object, instead of the tuple.
https://docs.djangoproject.com/en/1.6/ref/models/querysets/#get-or-create
您应该使用 get_or_create() 和models.ForeignKey() 需要 on_delete 如下所示。 *不要忘记将
.id
放在get_or_create(id=1)[0]
之后,因为 default inmodels.ForeignKey()
需要id
的Language
对象,否则会出现错误:You should use get_or_create() and models.ForeignKey() needs on_delete as shown below. *Don't forget to put
.id
just afterget_or_create(id=1)[0]
because default inmodels.ForeignKey()
needsid
of aLanguage
object otherwise there is an error: