So führen Sie Migrationen beim Hinzufügen eines neuen eindeutigen Felds ordnungsgemäß durch

9

Ich habe eines meiner Modelle um ein neues Feld erweitert:

%Vor%

Da dieses Feld nicht leer sein kann, hat django-admin makemigrations mich gebeten, einen einmaligen Standard anzugeben, was ich auch getan habe. Hier ist die generierte Migration:

%Vor%

Wie erwartet hat django-admin migrate einen Fehler geworfen:

%Vor%

Ich dachte, ich könnte die Migration bearbeiten, um eindeutige Werte festzulegen, bevor Sie das Feld eindeutig machen. Also habe ich es versucht:

%Vor%

Leider bekomme ich diesen Fehler beim Ausführen von django-admin migrate :

%Vor%

Ich vermute, dass operations nicht synchron ausgeführt werden.

Ich denke, ich könnte das Problem beheben, indem ich die Migration in zwei Migrationen aufspalte, aber ich würde gerne wissen, ob ich das in nur einer Migration machen kann. Was ist die übliche Methode zum Erstellen von Migrationen, wenn ein neues eindeutiges Feld in einem Modell hinzugefügt wird?

PS: Ich habe auch versucht, einen F-Ausdruck als Standard ( default=models.F('name') + '@example.fr' ) zu verwenden, aber es ist fehlgeschlagen:

%Vor%     
Antoine Pinsard 20.03.2016, 12:03
quelle

1 Antwort

2

Vielleicht ist es zu spät, aber vielleicht könnte es für jemand anderen funktionieren

Sie können dies in einer Migration mithilfe der migrations.RunSQL -Methode

tun

Für Ihren Beispielcode, nachdem Sie Ihrem Modell das neue Feld hinzugefügt und den Befehl python manage.py makemigrations ausgeführt haben (wenn Sie in Ihrem table-Befehl vorhandene Zeilen haben möchten, können Sie den Standardwert auswählen) Wählen Sie "Geben Sie eine einmalige Standard jetzt" -Option und geben Sie einen String-Wert ist es nicht wichtig, weil wir es nicht wirklich verwendet haben) dann gehen Sie zur Migrationsdatei und ändern Operationen Teil mit diesem (Hinweis ich benutze postgresql Sie können SQL für Ihre Datenbank ändern)

%Vor%

Führen Sie anschließend den Befehl python manage.py migrate aus das ist es.

    
Selim Yılmaz 27.01.2018 12:33
quelle

Tags und Links