![](/img/trans.png)
[英]Django: using the manager of the child model from an abstract parent model
[英]Initiate post save on Django abstract parent model, when child model saved
我有这个型号:
from django.db.models import Model
class SearchModel(Model):
class Meta:
abstract = True
class Book(SearchModel):
book_id = django_models.BigIntegerField(null=True, blank=True)
class Meta:
db_table = 'book'
我需要在book.save()
上book.save()
一个book.save()
函数( 在Book上没有任何代码更改/不在Book上创建post保存信号 )
我的动机是每个模型都继承自SearchModel,会有一些post_save处理程序(不需要编写额外的代码 - 只继承Signal)
可能吗?
这是相当简单:不提供任何具体的“发件人”连接你的时候post_save
处理程序,然后在处理程序检查是否sender
是的子类SearchModel
,即:
from django.db.signals import post_save
from django.dispatch import receiver
from django.db.models import Model
class SearchModel(Model):
class Meta:
abstract = True
def on_post_save(self):
print "%s.on_post_save()" % self
# NB `SearchModel` already inherits from `Model`
class Book(SearchModel):
book_id = django_models.BigIntegerField(null=True, blank=True)
class Meta:
db_table = 'book'
@receiver(post_save)
def search_on_post_save(sender, instance, **kwargs):
if issubclass(sender, SearchModel):
instance.on_post_save()
然后,您可以在SearchModel
提供默认实现,并在子类中根据需要覆盖它。
在你的signals.py
from django.db.signals import post_save
def search_on_post_save(sender, instance, **kwargs):
pass
for subclass in SearchModel.__subclasses__():
post_save.connect(search_on_post_save, subclass)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.