Django 模型:列的默认值

2021-12-19 00:00:00 django django-models mysql

我有以下 Django 模型代码:

I have following Django model code:

status = models.PositiveIntegerField(default = 0b000)
comments_allowed = models.BooleanField(default = True) # whether comments are allowed to this post

但我预计,它会生成类似的 SQL

But I expected, it would generate SQL like

`status` integer NOT NULL default '4',
`comments_allowed` bool NOT NULL default TRUE

这没有发生,当我运行 manage.py sqlall appname 它会产生:

Which is not happening and when I run manage.py sqlall appname it produces:

`status` integer UNSIGNED NOT NULL,
`comments_allowed` bool NOT NULL

深入研究 Django 的代码和谷歌搜索并没有给我什么,但 James Bennet 的评论认为 default 不会影响生成 SQL,但需要 Django 管理员.即使是这样,我如何获得预期的效果?

Delving into Django's code and googling gave me nothing, but James Bennet's comment that default is not assumed to affect generating SQL, but needed for Django admin. Even if so, how do I get desired effect?

我的 Django 版本是 1.3.0 最终版

My Django version is 1.3.0 final

推荐答案

请注意,default 参数也可以采用可调用对象:https://docs.djangoproject.com/en/dev/ref/models/fields/#default.这当然是 SQL 中无法重现的行为!因此,Django 不可能为每种可能的情况生成 SQL.看起来为了简单和一致性,他们选择不为任何情况生成 SQL.

Note that the default parameter can also take a callable object: https://docs.djangoproject.com/en/dev/ref/models/fields/#default. That is certainly a behavior that cannot be reproduced in SQL! So it would not be possible for Django to generate SQL for every possible case. It looks like for the sake of simplicity and consistency they have chosen not to generate SQL for any case.

相关文章