我在模型上的一个字段是:
class SomeModel(models.Model):
some_field = models.CharField(max_length=10, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
然后,我将模型更改为:
class SomeModel(models.Model):
some_field = models.CharField(max_length=10, default='')
Run Code Online (Sandbox Code Playgroud)
当我运行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;
Run Code Online (Sandbox Code Playgroud)
我不理解为什么Django DROP DEFAULT在表中应用a ,因为我正在创建默认值。如果这是正确的,Django如何实现默认值?
有关我的工具的信息:
我面临着表格默认值的问题。
例如我有这个模型:
class model1(models.Model):
field1 = models.CharField(max_length=50, default='My Default Value 1',db_column='field1')
field2 = models.CharField(max_length=10)
class Meta:
db_table = 'model1'
Run Code Online (Sandbox Code Playgroud)
并且 postgresql 表是在没有默认值的情况下生成的:
mydb=# \d model1
Table "public.model1"
Column | Type | Modifiers
--------+-----------------------+-----------------------------------------------------
id | integer | not null default nextval('model1_id_seq'::regclass)
field1 | character varying(50) | not null
field2 | character varying(10) | not null
Indexes:
"model1_pkey" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)
migrate sqlmigrate 的输出是:
CREATE TABLE "model1" ("id" serial NOT NULL PRIMARY KEY, "field1" varchar(50) NOT NULL, "field2" varchar(10) NOT …Run Code Online (Sandbox Code Playgroud)