レールの世界から来て、私はミックスインについて知りました。私はセットは、mixinで動的に変更されました
基本ミックスインを設定
コア/ mixins.py
from django.db import models
from django.contrib.auth.models import User
class Timestamps(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
そしてコアの私のEvent
モデル/ MY_APP/models.py
from core import mixins as core_mixins
class Event(core_mixins.Timestamps):
# ...
すべてうまくいきますが、これを少し拡張してよりダイナミックなミックスインを作りたいと思ったらどうしますか?
高度なミックスイン
コア/ mixins.py
from django.db import models
from django.contrib.auth.models import User
from django.dispatch import receiver
from django.db.models.signals import pre_save
from cw_core.requestprovider.signals import get_request
class Trackable(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
created_by = models.ForeignKey(User, related_name='created_XXX') # <-- ???
updated_by = models.ForeignKey(User, related_name='updated_XXX') # <-- ???
class Meta:
abstract = True
@receiver(pre_save, sender=Event) # <-- ???
def security_attributes(sender, instance, **kwargs):
request = get_request()
instance.updated_by = request.user
if instance.id is None:
instance.created_by = request.user
コア/ MY_APP/models.py
私は動的にrelated_name
を設定する方法を
from core import mixins as core_mixins
class Event(core_mixins.Trackable):
# ...
?私はfound this questionですが、文字列で使用できる変数が見つかりませんでした。ドキュメントはありますか?
また、
@receiver
コールで送信者を動的に設定するにはどうすればよいですか?
私の試みは設定して次のようになります。
@receiver(pre_save, sender=self.__class__)
をしかし、私はこれが機能するかどうかわからないのですか?提案されたアプローチは何ですか?
があります関連する名前) –