class 'Attachment' 中的本地字段 'created_at' 与基 class 'Timestampable' 中具有相似名称的字段冲突
Local field 'created_at' in class 'Attachment' clashes with field of similar name from base class '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)
当我尝试迁移这些模型时,出现以下错误:
django.core.exceptions.FieldError: Local field 'created_at' in class 'Attachment' clashes with field of similar name from base class 'Timestampable'
我读到 here, , and here 当基础 class 是抽象的时候这应该有效。但是,我将其标记为抽象它似乎仍然不起作用。还有什么可能是错的?我正在使用 Django 1.8.14.
因为您的 Timestampable 模型已经从 models.Model 扩展而来。您不需要扩展附件模型。
请使用:
class Attachment(Timestampable):
而不是:
class Attachment(Timestampable, models.Model):
我找到问题所在了。我以前 class Timestampable
不是从 models.Model
继承的。因此,在我最初的一次迁移中,我有一行:
bases=(at_common.behaviours.Timestampable, models.Model),
我正在寻找一种方法来删除它。结果我只需要从初始迁移文件中删除这一行。
我有以下两个模型:
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)
当我尝试迁移这些模型时,出现以下错误:
django.core.exceptions.FieldError: Local field 'created_at' in class 'Attachment' clashes with field of similar name from base class 'Timestampable'
我读到 here,
因为您的 Timestampable 模型已经从 models.Model 扩展而来。您不需要扩展附件模型。
请使用:
class Attachment(Timestampable):
而不是:
class Attachment(Timestampable, models.Model):
我找到问题所在了。我以前 class Timestampable
不是从 models.Model
继承的。因此,在我最初的一次迁移中,我有一行:
bases=(at_common.behaviours.Timestampable, models.Model),
我正在寻找一种方法来删除它。结果我只需要从初始迁移文件中删除这一行。