2017-10-26 3 views
0

Ein Feld zu einem meiner MySQL-Tabelle zuvor hinzugefügt wurde:Django Migrationen wechselnden Entscheidungen schätzen

in meinem UI
# -*- coding: utf-8 -*- 
# Generated by Django 1.9.7 on 2017-09-14 00:49 
from __future__ import unicode_literals 

from django.db import migrations, models 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('my_app', '0102_previous_migrations'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='my_client', 
      name='my_team', 
      field=models.CharField(choices=[('Unassigned', 'Unassigned'), ('ACT', 'ACT'), ('Korea', 'Korea'), ('National', 'National')], default='Unassigned', max_length=255, verbose_name='My Team'), 
     ), 
    ] 

So dass die Nutzer haben eine Auswahl der oben genannten Auswahl und wird in die Tabelle my_client gespeichert werden:

  • Unassigned
  • ACT
  • Korea
  • Nationale

Die Änderungen implementiert wurden und nun ein Anfänger wie ich würde gerne ändern, das heißt Korea entfernen und 2 neue Möglichkeiten hinzu: NSW und SA

Wie würde ich über diese gehen? Benötige ich eine weitere Migration oder muss ich diese Auswahl nur in den Modellen ändern?

ich dies in meinem Modell nun wie folgt aus:

class Client(MyAppModel): 
    TEAM_CHOICES = (
     ('Unassigned', 'Unassigned'), 
     ('ACT', 'ACT'), 
     ('Korea', 'Korea'), 
     ('National', 'National'), 
) 

DEFAULT_TEAM = 'Unassigned' 
my_team = models.CharField(verbose_name='MyTeam', null=False, max_length=255, choices=TEAM_CHOICES, default=DEFAULT_TEAM) 

Update:

Base auf den Kommentar, den ich habe, will ich auch eine Migration benötigen, eine AlterField?

Muss ich auch alle vorhandenen Werte in der Tabelle my_client aktualisieren, wenn eine von ihnen Korea hat, um Unassigned zu sagen, wenn ich Korea als eine Auswahl entfernen möchte? Welchen Befehl kann ich bei der Migration verwenden?

+1

Sie eine Migration benötigen. Siehe https://stackoverflow.com/questions/33514058/django-creates-pointless-migrations-on-choices-list-change/33514551#33514551 – solarissmoke

+0

danke @solarisssmoke, wie würde die Migration aussehen, wie die ändert sich nicht nur Entscheidungen? –

+0

Es sollte nur wechselnde Auswahlmöglichkeiten zeigen. Wie sieht dein aus? – solarissmoke

Antwort

0

Entwirf es später, hoffe es hilft anderen Anfänger wie mir.

ich habe die Client-Modell

class Client(MyAppModel): 
    TEAM_CHOICES = (
     ('Unassigned', 'Unassigned'), 
     ('National', 'National'), 
     ('NSW', 'NSW'), 
     ('SA', 'SA'), 
) 

Dann diesen Befehl eingeben aktualisieren:

python manage.py makemigrations 

Eine Migration generiert werden:

from __future__ import unicode_literals 

from django.db import migrations, models 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('my_app', '0102_previous_migrations'), 
    ] 

    operations = [ 
     migrations.AlterField(
      model_name='my_client', 
      name='my_team', 
      field=models.CharField(choices=[('Unassigned', 'Unassigned'), ('ACT', 'ACT'), ('National', 'National'), ('NSW', 'NSW'), ('SA', 'SA')], default='Unassigned', max_length=255, verbose_name='My Team'), 
     ), 
    ] 

Weiter alle vorhandenen Werte aktualisieren Geben Sie in der Tabelle jetzt, here genannt, diesen Befehl ein, um ein leeres m zu erstellen igration Datei:

Python manage.py makemigrations --empty my_app

In der neuen Migrationsdatei, setzen Sie so etwas wie:

# -*- coding: utf-8 -*- 
# Generated by Django 1.9.7 on 2017-10-26 06:36 
from __future__ import unicode_literals 

from django.db import migrations 

def set_unassigned(apps, schema_editor): 
    Client = apps.get_model('my_app', 'my_client') 
    for client in Client.objects.all(): 
     client.account_team = 'Unassigned' 
     client.save() 

class Migration(migrations.Migration): 

    dependencies = [ 
     ('my_app', '0104_client_team_update'), 
    ] 

    operations = [ 
     migrations.RunPython(set_unassigned), 
    ] 
Verwandte Themen