当前位置: 首页 > 面试题库 >

Django在数据库中默认值的实现

席嘉祯
2023-03-14
问题内容

我在模型上有一个字段,其内容是:

class SomeModel(models.Model):
    some_field = models.CharField(max_length=10, null=True, blank=True)

然后,我将模型更改为:

class SomeModel(models.Model):
    some_field = models.CharField(max_length=10, default='')

当我运行django-admin sqlmigrate somemodels somemigration以检查迁移时,发现以下更改:

ALTER TABLE "somemodels" ALTER COLUMN "some_field" SET DEFAULT '';
UPDATE "somemodels" SET "some_field" = '' WHERE "some_field" IS NULL;
ALTER TABLE "somemodels" ALTER COLUMN "some_field" SET NOT NULL;
ALTER TABLE "somemodels" ALTER COLUMN "some_field" DROP DEFAULT;

我不理解为什么DjangoDROP DEFAULT在表中应用a ,因为我正在 创建 默认值。如果这是正确的,Django如何实现默认值?

有关我的工具的信息:

  • PostgreSQL 9.5;
  • Django 1.11b1;

问题答案:

从ln开始的对django / db / backends / base /
schema.py的注释
。571,详细说明此处涉及的步骤:

当使用给定的默认值将列NULL约束更改为NOT NULL时,我们需要执行4个步骤:

  1. 为新的传入写入添加默认值
  2. 使用新的默认值更新现有的NULL行
  3. 用NOT NULL替换NULL约束
  4. 再次删除默认值。

Django通常不使用内置的SQL默认值来设置值(请记住,Django可以使用可调用的值作为默认值)。您可以在此拒绝的错误报告中找到更多信息。



 类似资料:
  • 问题内容: 我有以下模型代码: 但是我希望,它将生成类似 这没有发生,当我运行它时会产生: 深入研究的代码并进行谷歌搜索没有给我任何好处,但是James Bennet的注释不被认为会影响生成,但是Django管理员需要它。即使是这样,我如何获得理想的效果? 我的版本是1.3.0最终版 问题答案: 请注意,该参数也可以采用可调用对象:https : //docs.djangoproject.com/

  • 问题内容: 假设我有一个模型: 目前,我正在使用默认的admin创建/编辑此类型的对象。如何从管理员中删除该字段,以使每个对象都无法使用值创建,而是将接收默认值? 问题答案: 设置为和为默认值。 http://docs.djangoproject.com/en/dev/ref/models/fields/#editable 另外,你的字段是不必要的。Django将自动添加它。

  • 基本上我想知道,如果得到空值,如何将默认值设置为Pojo变量? 我在项目中使用了Spring数据Cassandra。布尔列中的某些条目为null,当我从数据库中提取记录时,它会引发以下错误: 布尔值不能为null 甚至我也面临着同样的问题。。。列。 因此,当数据库的列为null时,我想给这些字段一个默认值。 这是我希望的最后一个例子: 我已经了解了//...但是我什么都没有。 请帮帮我。

  • JOOQ似乎完全忽略了数据库列的默认值。既不会更新ActiveRecord对象,也不会在插入时跳过此列。相反,它尝试将其设置为NULL,这在非NULL列上失败。 例: 我所期望的行为是,要么new记录()用korrekt值初始化所有默认变量(尽管我知道如果结果是自定义函数的结果,这可能很困难:-))。或者INSERT INTO不插入所有带有默认值的未修改列,然后INSERT INTO后面跟着一个S

  • 我为此挣扎了很长时间。我正在更改代码,需要将默认值设置为特立尼达岛的selectOneRadio元素。我有来自数据库的对象(例如称为result)。此对象具有属性decision。在select元素中,value参数的使用方式是。 现在我需要结果。decision为空,将值设置为True。如果值为False,则将值设置为False。如果值为True,则将值设置为True。我在模板中尝试了类似的方法

  • 案例:我想在合并对象后获取映射到数据库端默认值列的字段值。 表: 类别: DAO: 我想做什么: 结果:对象被插入到数据库中,所有默认值都正确生成。 问:为什么第二个println打印null,而第一个println打印插入数据库的Id的正确值?