Tengo los siguientes dos modelos:
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)Cuando intento migrar estos modelos, aparece el siguiente error:
django.core.exceptions.FieldError: Local field 'created_at' in class 'Attachment' clashes with field of similar name from base class 'Timestampable'Leí here , here y here que esto debería funcionar cuando la clase base es abstracta. Sin embargo, lo marqué como abstracto y todavía no parece funcionar. ¿Qué más podría estar mal? Estoy usando Django 1.8.14.
Porque su modelo con marca de tiempo ya se extiende desde models.Model. No necesita extender el modelo de archivo adjunto.
por favor use:
class Attachment(Timestampable):en vez de:
class Attachment(Timestampable, models.Model):Encontré cuál era el problema. Solía tener la clase Timestampable que no se heredaba de models.Model . Por lo tanto, en una de mis migraciones iniciales, tenía la línea:
bases=(at_common.behaviours.Timestampable, models.Model),Estaba buscando una manera de eliminar esto. Resultó que solo tenía que eliminar esta línea del archivo de migración inicial.