2017-08-15 2 views
0

ich ein Modell mit einem Nicht-Null-Feld haben, die ich gelöscht:Revert Migration auf gelöscht nicht null Feld

class Spam(models.Model): 
    slug = models.SlugField(allow_unicode=True) # deleted 

Nachdem ich die Migrationen gemacht und wandte sie, ich sie zurückkehren wollte. Aber natürlich führt dies in

django.db.utils.IntegrityError: NOT NULL constraint failed: eggs_spam.slug 

Wie kann ich die Migration wiederherstellen?

Antwort

1

Das ist schwierig. Die einzige Lösung, die ich denken kann, ist die folgende:

1: Erstellen Sie zunächst eine Migration, die der Butzen Feld nullable sein können

2: Erstellen Sie dann eine weitere Migration, die das Feld für jede Zeile bevöl

3: Zuletzt erstellen Sie eine Migration, die das Feld nicht nullfähig macht.

Hoffen, dass es

+0

Wie kann ich das tun, wenn der Slug bereits gelöscht wurde und ich ihn nicht wiederherstellen kann? – Joren

+0

@Joren wie gesagt: Sie sollten es wieder hinzufügen, aber machen Sie es zuerst nullfähig. Erstellen Sie dann eine Datenmigration, die jede Zeile mit einem Wert füllt. Erstellen Sie dann eine Nicht-Null-Einschränkung. –

+0

Ahh ja ich verstehe, das hat funktioniert. Schade, ich habe jetzt 4 zusätzliche Migrationen aufgrund eines Fehlers während der Entwicklung gemacht – Joren

0

Es hilft, ist ein einfacher Weg:

  1. Suche Migration, wo Sie zunächst Slug Feldwert
  2. hinzufügen add default haben Feld
  3. Unapply letzte Migration
  4. slug Entfernen Sie den Standardwert von der anfänglichen Migration des Slug-Felds
Verwandte Themen