2017-02-21 2 views
0

Я столкнулся с проблемой со значениями значений по умолчанию для таблиц.Django Postgresql dropping column defaults at migrate

, например, у меня есть эта модель:

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' 

и таблицу 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) 

выход мигрирует sqlmigrate является:

CREATE TABLE "model1" ("id" serial NOT NULL PRIMARY KEY, "field1" varchar(50) NOT NULL, "field2" varchar(10) NOT NULL); 
COMMIT; 

, но если я изменяю значение по умолчанию в модели и запускаю makemigrations/migrate, и после этого i смотреть в sqlmigrations выходного genereates странного DROP DEFAULT после создания

ALTER TABLE "model1" ALTER COLUMN "field1" SET DEFAULT 'My Default Value 1 modified'; 
ALTER TABLE "model1" ALTER COLUMN "field1" DROP DEFAULT; 
COMMIT; 

есть что-то мне не хватает или значений по умолчанию для столбцов просто не поддерживается?

ответ

0

Я знаю, что немного поздно, но у меня была такая же проблема. После поиска широко, я нашел это

«Django использует по умолчанию базы данных, чтобы установить значения по существующим строкам в таблице . Он не оставляет значения по умолчанию в базе данных так, сбросив по умолчанию является правильным поведением.»

https://code.djangoproject.com/ticket/28000

так это выглядит так просто, как Джанго был разработан. Это прослушивало меня, потому что когда я вставлял данные с использованием MySQL, мне были даны предупреждения о том, что у меня нет дефолта.

Вздох, я уверен, что более умные люди, чем я, могут найти хорошее объяснение, почему они так его спроектировали.