2017-06-11 3 views
1

Ich versuche, eine App namens django-cities aber in meinem app „Orten“ zu deinstallieren Ich habe ein Modell Venue genannt, dass bei der Migration 0001_initial.py hatte ein ForeingKey-cities.Subregion Modell von django-cities.Uninstall App A die App B hat eine Abhängigkeit in einer alten Migration

Ich ging django-cities von INSTALLED_APPS zu löschen, aber ich habe den folgenden Fehler:

Traceback (most recent call last): 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper 
    fn(*args, **kwargs) 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 128, in inner_run 
    self.check_migrations() 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/core/management/base.py", line 422, in check_migrations 
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 20, in __init__ 
    self.loader = MigrationLoader(self.connection) 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 52, in __init__ 
    self.build_graph() 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 274, in build_graph 
    raise exc 
django.db.migrations.exceptions.NodeNotFoundError: Migration places.0001_initial dependencies reference nonexistent parent node (u'cities', u'0010_adjust_unique_attributes') 

Dann löschte ich diese Abhängigkeiten und django-cities deinstallieren und alle für mich gearbeitet, aber wenn jemand anderes hat das Projekt zu installieren, die migrate Befehl hebt den folgenden Fehler:

ValueError: Related model u'cities.Subregion' cannot be resolved 

, weil ich aus requirements.txt gelöscht und es wird nach wie vor in der Migration verweist 0001_initial.py:

class Migration(migrations.Migration): 

    initial = True 

    dependencies = [ 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='Venue', 
      fields=[ 
       ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 
       ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), 
       ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), 
       ('name', models.CharField(max_length=255)), 
       ('phone', models.CharField(blank=True, max_length=255, null=True)), 
       ('mobile', models.CharField(blank=True, max_length=255, null=True)), 
       ('email', models.EmailField(blank=True, max_length=254, null=True)), 
       ('address', models.CharField(blank=True, max_length=255, null=True)), 
       ('latitude', models.CharField(blank=True, max_length=100, null=True)), 
       ('longitude', models.CharField(blank=True, max_length=100, null=True)), 
       ('subregion', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cities.Subregion')), 
      ], 
      options={ 
       'abstract': False, 
      }, 
     ), 
    ] 

Dann lösche ich die Zeile:

('subregion', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cities.Subregion')), 

und andere Fehler haben:

AttributeError: 'NoneType' object has no attribute 'is_relation' 

Ich habe auch versucht, alle .pyc Dateien aus dem Projekt zu löschen, ich gegoogelt auch diese Fehler und gefunden this, aber es gab keine Antwort.

Irgendwelche Infos dazu?

Danke und Entschuldigung für mein schlechtes Englisch.

+0

versuchen diese Migration Datei zu löschen und erneut ausführen makemigration wandern dann aber zunächst Venue Tabelle von db löschen und auch alte Veranstaltungsort Migration Dateieintrag aus django_migrations Tabelle löschen. –

+0

Ich möchte die Venue-Tabelle nicht von db löschen. –

Antwort

1

Es gibt zwei mögliche Lösungen:

Hinweis: für die beiden folgenden Lösungen Sie die alte Venue Tabelle aus der Datenbank löschen müssen, bevor Sie fortfahren.

Die einfach:

  • zu Ihren migrations/ Ordnern gehen und alles außer der __init__.py Datei löschen.

  • Löschen Sie Ihre App aus der INSTALLED_APPS.

  • Führen Sie python manage.py makemigrations, die Ihre Migrationen in dem Ordner neu erstellen wird.

  • Run python manage.py migrate

    Nachteile: Sie verlieren Ihre Migrationsgeschichte, wenn es ankommt (in Ihrem Fall gehe ich davon aus, dass es nicht, da Sie für die Migration 0001 bezieht sich Materie)

Der schwierige Weg:

Sie müssen jede Migrationsdatei in IhremändernOrdner:

  • Gehen Sie zu jeder Migrationsdatei und finden jede Bezugnahme auf die App, die
  • diese Verweise löschen erhalten deinstalliert werden:

    Beispiel löschen Sie die Zeile:

    ('subregion', models.ForeignKey(
            blank=True, 
            null=True, 
            on_delete=django.db.models.deletion.CASCADE, 
            to='cities.Subregion' 
          )) 
    

    aus Die Venue-Tabelle zeigt die Migration an.

  • Löschen Sie Ihre App aus der INSTALLED_APPS.

  • Run python manage.py migrate

    Nachteile: Es ist kompliziert und fehleranfällig.

Viel Glück :)

+0

Ich denke, dass die einfache Lösung funktionieren sollte, aber ich muss sicher sein, dass alle Server (Staging und Prod) die letzte Migration bereitgestellt haben, weil ich alle Migrationsdateien aus dem Ordner löschen muss. Dann, wenn jemand das Projekt installieren muss, wird passieren, ohne es zu wissen. Danke für die Bearbeitung und Antwort. Ich werde es testen. –

+0

In der einfachen Lösung haben Sie nach 'makemigrations' eine neue' 0001_initial.py', die Sie danach verwenden können! –

+0

Ich habe hier einen Zweifel, denn was passiert mit django_migrations records ?, denn wenn ich in dieser App migrieren muss, erstellt django eine 0002 migration, die bereits in staging und production db angewendet wird. –

Verwandte Themen