beschriftung - python plot name figure




Django-Wie kann man ein Modellfeld mit South umbenennen? (4)

  1. Fügen Sie den installierten Apps in der Projekteinstellungsdatei den south .
  2. Kommentieren Sie das hinzugefügte / geänderte Feld / Tabelle.
  3. $ manage.py Schemamigration <app_name> --initial
  4. $ manage.py migrate <app_name> --Fake
  5. Unkommentieren Sie das Feld und schreiben Sie das geänderte Feld
  6. $ manage.py Schemamigration --auto
  7. $ manage.py migrate <app_name>

Wenn Sie 'pycharm' verwenden, können Sie 'ctrl + shift + r' anstelle von 'manage.py' und 'shift' für Parameter verwenden.

Ich möchte den Namen bestimmter Felder in einem Modell ändern:

class Foo(models.Model):
    name = models.CharField()
    rel  = models.ForeignKey(Bar)

sollte sich ändern zu:

class Foo(models.Model):
    full_name     = models.CharField()
    odd_relation  = models.ForeignKey(Bar)

Was ist der einfachste Weg, dies mit South zu tun?


Django 1.7 hat Migrations eingeführt, sodass Sie jetzt nicht einmal ein zusätzliches Paket installieren müssen, um Ihre Migrationen zu verwalten.

Um Ihr Modell umzubenennen, müssen Sie zunächst eine leere Migration erstellen:

$ manage.py makemigrations <app_name> --empty

Dann müssen Sie den Code Ihrer Migration wie folgt bearbeiten:

from django.db import models, migrations

class Migration(migrations.Migration):

dependencies = [
    ('yourapp', 'XXXX_your_previous_migration'),
]

operations = [
    migrations.RenameField(
        model_name='Foo',
        old_name='name',
        new_name='full_name'
    ),
    migrations.RenameField(
        model_name='Foo',
        old_name='rel',
        new_name='odd_relation'
    ),
]

Und danach musst du laufen:

$ manage.py migrate <app_name>

Ich wusste nicht über db.rename Spalte, klingt praktisch, aber in der Vergangenheit habe ich die neue Spalte als eine Schemamigration hinzugefügt, dann eine Datamigration erstellt, um Werte in das neue Feld zu verschieben, dann eine zweite Schemamigration, um die alte Spalte zu entfernen


Sie können die Funktion db.rename_column verwenden.

class Migration:

    def forwards(self, orm):
        # Rename 'name' field to 'full_name'
        db.rename_column('app_foo', 'name', 'full_name')




    def backwards(self, orm):
        # Rename 'full_name' field to 'name'
        db.rename_column('app_foo', 'full_name', 'name')

Das erste Argument von db.rename_column ist der Tabellenname. db.rename_column ist es wichtig, sich daran zu erinnern, wie Django Tabellennamen erstellt :

Django leitet den Namen der Datenbanktabelle automatisch vom Namen Ihrer Modellklasse und der App, die sie enthält, ab. Der Name eines Datenbanktabels eines Modells wird erstellt, indem das "app label" des Modells - der Name, den Sie in manage.py startapp verwendet haben - mit dem Klassennamen des Modells mit einem Unterstrich verknüpft wird.

app_projectitem Sie einen Modellnamen mit mehreren Wörtern und Kamelen haben, z. B. ProjectItem, app_projectitem der Tabellenname app_projectitem (dh, ein Unterstrich wird nicht zwischen project und item eingefügt item auch wenn er mit einem Kamel versehen ist).





django-south