2017-02-21 5 views
0

Ich habe ein Problem mit Standardwerten von Tabellen.Django Postgresql Drop Spalte standardmäßig bei Migration

zum Beispiel habe ich dieses Modell:

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' 

und die postgresql Tabelle ohne den Standard erzeugt:

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) 

die Ausgabe von Migrate sqlmigrate ist:

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

aber wenn ich den Standardwert im Modell ändere und eine makemigrations/migrate und danach i Blick in sqlmigrations die Ausgangs genereates eine seltsame DROP DEFAULT nach

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

schaffen, ist es etwas, was ich bin fehlt oder Standardwerte für Spalten werden nur nicht unterstützt?

Antwort

0

Ich weiß, es ist ein bisschen spät, aber ich hatte das gleiche Problem. ausführlich, fand nach der Suche i diesem

„Django verwendet Standardwerte Datenbankwert auf vorhandene Zeilen in einem Tisch zu setzen. Es bleibt nicht die Standardwerte in der Datenbank so fallen das Standard richtiges Verhalten ist.“

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

so sieht es aus wie das einfach ist, wie django entwickelt wurde. Es hat mich abgehört, denn als ich dann Daten mit MySQL eingab, wurde ich gewarnt, dass ich keinen Standard habe.

Seufz, ich bin sicher, klügere Leute als ich könnten eine gute Erklärung finden, warum sie es so entworfen haben.