2017-04-25 1 views
1

Ich habe die folgenden zwei Modelle:Lokale Feld ‚created_at‘ in der Klasse ‚Anlage‘ kollidiert mit Feld ähnlicher Namen aus der Basisklasse ‚Timestampable‘

class Timestampable(models.Model): 
    created_at = models.DateTimeField(null=True, default=None) 
    updated_at = models.DateTimeField(null=True, default=None) 

    class Meta: 
     abstract = True 

    def save(self, *args, **kwargs): 
     now = timezone.now() 
     if not self.created_at: 
      self.created_at = now 
     self.updated_at = now 

     super(Timestampable, self).save(*args, **kwargs) 

class Attachment(Timestampable, models.Model): 
    uuid = models.CharField(max_length=64, unique=True) 
    customer = models.CharField(max_length=64) 
    user = models.CharField(max_length=64) 
    file = models.FileField(upload_to=upload_to) 
    filename = models.CharField(max_length=255) 
    mime = models.CharField(max_length=255) 
    publicly_accessible = models.BooleanField(default=False) 

Wenn ich versuche, diese Modelle zu migrieren, erhalte ich die folgende Fehlermeldung:

django.core.exceptions.FieldError: Local field 'created_at' in class 'Attachment' clashes with field of similar name from base class 'Timestampable' 

ich las here, here und here, dass dies funktionieren, wenn die Basisklasse abstrakt ist. Ich habe es jedoch als abstrakt markiert, trotzdem scheint es nicht zu funktionieren. Was könnte sonst noch falsch sein? Ich benutze Django 1.8.14.

Antwort

0

Ich fand, was das Problem war. Früher habe ich die Klasse Timestampable nicht von models.Model erben lassen. Daher wird in einer meiner ersten Migrationen, hatte ich die Zeile:

bases=(at_common.behaviours.Timestampable, models.Model), 

ich nach einem Weg suchen, diese zu entfernen. Es stellte sich heraus, dass ich diese Zeile nur aus der ursprünglichen Migrationsdatei löschen musste.

1

Da Ihr Timestampable-Modell bereits von models.Model erstreckt. Sie benötigen kein erweitertes Attachment-Modell.

bitte:

class Attachment(Timestampable): 

statt:

class Attachment(Timestampable, models.Model): 
+0

In der Tat, danke! Das habe ich auch bemerkt, nachdem ich es gepostet habe. Es löste das Problem jedoch nicht. – physicalattraction

Verwandte Themen