2017-05-29 3 views
0

So habe ich ein Modell in meinem Django-Projekt (zum Beispiel Argumente 'app' genannt);Django Migrations Entfernen Feld

class ModelA(models.Model): 
    fieldA = models.IntegerField(default=0) 

und ich kann Python manage.py Makemigrations App ausführen; Das gibt mir

Migrations for 'app': 
    app/migrations/0001_initial.py 
    - Create model ModelA 

Wenn ich dann ein neues Feld zu ModelA hinzufügen, so wie es aussieht;

class ModelA(models.Model): 
    fieldA = models.IntegerField(default=0), 
    fieldB = models.IntegerField(default=1) 

und dann makemigrations wieder laufen, bekomme ich;

Migrations for 'app': 
    app/migrations/0002_auto_20170529_1737.py 
    - Remove field fieldA from modela 
    - Add field fieldB to modela 

Die automatisch generierte Datei sichert dies ab;

operations = [ 
     migrations.RemoveField(
      model_name='modela', 
      name='fieldA', 
     ), 
     migrations.AddField(
      model_name='modela', 
      name='fieldB', 
      field=models.IntegerField(default=1), 
     ), 
    ] 

Warum entfernt es FeldA?

Mein Verständnis war, dass es nur Skriptänderungen an den Modellen, d. H. That fieldB wurde hinzugefügt werden.

Antwort

2

Das Problem ist, dass Sie ein Komma in die fielda Zeile hinzugefügt, wenn Sie fieldb hinzugefügt:

fieldA = models.IntegerField(default=0), 

Sie sollten das Komma entfernen und die 0002 Migration löschen. Wenn Sie dann makemigrations erneut ausführen, versucht Django nicht mehr, fielda zu entfernen.

+0

* facepalm * Vielen Dank, sehr! Das war so frustrierend. – coagulantmonkey