11

Dies ist:Abrufen eines "Die folgenden Inhaltstypen sind veraltet und müssen gelöscht werden", wenn Sie versuchen, eine Migration durchzuführen. Was bedeutet das und wie kann ich es lösen? mein models.py

class Notification(models.Model): 
    user = models.ForeignKey(User) 
    createdAt = models.DateTimeField(auto_now_add=True, blank=True) 
    read = models.BooleanField(default=False, blank=True) 

    class Meta: 
     abstract = True 

class RegularNotification(Notification): 
    message = models.CharField(max_length=150) 
    link = models.CharField(max_length=100) 

class FNotification(Notification): 
    # same as Notification 
    pass 

Wenn ich python manage.py makemigrations tun, das ist, was es sagt:

Migrations for 'CApp': 
    0019_auto_20151202_2228.py: 
    - Create model RegularNotification 
    - Create model FNotification 
    - Remove field user from notification 
    - Add field f_request to userextended 
    - Delete model Notification 

Erstens, es ist seltsam, dass es sagt Remove field user from notification weil user noch in meinem Notiication Modell ist (Wenn also irgendjemand herausfinden kann, warum es sagt "Entfernen des Feldbenutzers von der Benachrichtigung", wäre das großartig!), aber nichtsdestotrotz, wenn ich weitergehe und versuche, python manage.py migrate zu tun, bekomme ich diese Nachricht:

Applying CMApp.0019_auto_20151202_2228... OK 
The following content types are stale and need to be deleted: 

    CApp | notification 

Any objects related to these content types by a foreign key will also 
be deleted. Are you sure you want to delete these content types? 
If you're unsure, answer 'no'. 

    Type 'yes' to continue, or 'no' to cancel: no 

Ich tippte no. Aber was genau bedeutet das, warum bekomme ich diese Nachricht und wie mache ich es so, dass ich diese Nachricht nicht benötige?

+0

Ich habe das, weil ich vergessen habe, die letzte Festschreibung des Repository zu ziehen. Meine letzte lokale Migration war nicht die neueste im Repository. : P Ich habe den Ferncode gezogen, ich habe die Migrationen erneut durchgeführt und ich habe wie ein Zauberer gearbeitet. – joaorodr84

Antwort

10

Die Nachricht, die Sie erhalten, wird ausgelöst, wenn Sie ein Modell entfernen/löschen und eine Migration durchführen.

In den meisten Fällen können Sie sie sicher löschen. In einigen Fällen kann dies jedoch zu Datenverlust führen. Wenn andere Modelle einen Fremdschlüssel für das entfernte Modell haben, werden diese Objekte ebenfalls gelöscht.

Here's the django ticket that requests to make deleting stale content types safer.

EDIT

Wie @ x-yuri darauf, dieses Ticket festgelegt wurde und in Django 1.11 veröffentlicht.

+0

Oh, also, weil ich dem 'Notification'-Modell 'Abstract = True' hinzugefügt habe, vermutet Django wahrscheinlich, dass ich es gelöscht habe. Irgendeine Idee, warum es sagt '- Entferne Feldbenutzer von der Benachrichtigung' dann? Da der "Benutzer" ForeignKey immer noch da ist, warum sagt Django, dass er entfernt wurde? – user2719875

+0

Ich bin mir da nicht ganz sicher. Vielleicht können Sie die Migrationsdatei hinzufügen, um zu überprüfen, was passiert. –

+0

@RodXavier in meinem Fall Ich habe ein Modell A, das mit Fremdschlüsseln zu Modell B, C gelöscht wurde. Es bedeutet, dass durch die Migration die Daten in Modell B, C gelöscht werden oder nur wenn es einen Fremdschlüssel gibt Modell A? Danke – Pietro

Verwandte Themen