2016-09-11 15 views
0

こんにちは私は、いくつかのフィールドを作成してmixinに変換する方法を知りたかったのです。Djangoモデル監査mixin

次のようなことがあります。

class Supplier(models.Model): 
    name = models.CharField(max_length=128) 
    created_by = models.ForeignKey(get_user_model(), related_name='%(class)s_created_by') 
    modified_by = models.ForeignKey(get_user_model(), related_name='%(class)s_modified_by') 
    created_date = models.DateTimeField(editable=False) 
    modified_date = models.DateTimeField() 

    def save(self, *args, **kwargs): 
     if not self.id: 
      self.created_date = timezone.now() 
     self.modified_date = timezone.now() 
     return super(Supplier, self).save(*args, **kwargs) 

最後の4つのフィールドが異なるモデルに書き込まれるたびに、ミックスインを作成したいと思います。ここで

は、私が作成しますミックスインです:

class AuditMixin(models.Model): 
    created_by = models.ForeignKey(get_user_model(), related_name='%(class)s_created_by') 
    modified_by = models.ForeignKey(get_user_model(), related_name='%(class)s_modified_by') 
    created_date = models.DateTimeField(editable=False) 
    modified_date = models.DateTimeField() 


    def save(self, *args, **kwargs): 
     if not self.id: 
      self.created_date = timezone.now() 
     self.modified_date = timezone.now() 
     return super(Supplier, self).save(*args, **kwargs) 

class Supplier(AuditMixin): 
    name = models.Charfield(max_length=128) 

にはどうすればrelated_nameがミックスインがに含まれているクラスに関連していることを確認することができますか?また、save関数では、mixinが含まれているクラスが返されるようにするにはどうしたらいいですか?

ありがとうございました!

答えて

2

まず、superコールでは、常にが現在のクラスを使用する必要があります。したがって、常にsuper(AuditMixin, self)...となり、あなたの質問は適用されません。

%(class)sの構文を使用している場合は、Django自体が現在のクラス名をrelated_nameに置き換えて処理するので、もう一度行う必要はありません。 the model inheritance docsを参照してください。