2017-04-25 4 views
1

私は、次の2つのモデルをしている基本クラスから類似した名前のフィールドを持つ「添付ファイル」衝突:私はこれらのモデルを移行しようとするとローカルフィールドクラスの「のcreated_at」「する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' 

は、私は、基本クラスが抽象的であるとき、これが動作しなければならないことherehere、およびhereをお読みください。しかし、私は抽象的であるとマークしましたが、それはまだ動作していないようです。他に何が間違っているのでしょうか?私はDjango 1.8.14を使用しています。

答えて

0

は私が問題だったものを見つけました。私はクラスを持っていなかったので、models.Modelから継承していません。したがって、私の最初の移行では、私は次の行を持っていました:

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

これを削除する方法を探していました。最初の移行ファイルからこの行を削除するだけで済むことが判明しました。

1

Timestampableモデルは既にmodels.Modelから拡張されています。アタッチメントモデルを拡張する必要はありません。

使用してください:

class Attachment(Timestampable): 

の代わり:

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

本当にありがとうございます!私はそれを投稿した後も気づいた。しかしそれは問題を解決しませんでした。 – physicalattraction

関連する問題