來自rails世界,我很高興地發現mixin。我成立了一個由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):
# ...
所有這些都很好,但如果我想擴展一下並創建一個更動態的mixin,該怎麼辦?
高級混入
核心/ 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
from core import mixins as core_mixins
class Event(core_mixins.Trackable):
# ...
我將如何動態地設置
related_name
?我found this question但我還沒有找到我可以在字符串中使用的變量,有沒有文檔?此外,我將如何動態設置
@receiver
調用中的發件人?
我嘗試將設置:
@receiver(pre_save, sender=self.__class__)
但我不能確定這是否行得通呢?建議的方法是什麼?
Regariding的'related_name'我發現這個[整齊DOC](https://docs.djangoproject.com/en/1.11/ref/models/options/#default-相關名稱) –