一尘不染

Django-重写Model.create()方法?

django

在Django文档只列出了重写的例子save()delete()。但是,我只想在模型创建时为它们定义一些额外的处理。对于熟悉Rails的任何人来说,这等同于创建:before_create过滤器。这可能吗?


阅读 1345

收藏
2020-04-03

共1个答案

一尘不染

__init__()每当实例化对象的python表示形式时,覆盖将导致执行代码。我不知道rails,但是一个:before_created过滤器听起来像是在数据库中创建对象时要执行的代码。如果要在数据库中创建新对象时执行代码,则应重写save(),检查该对象是否具有pk属性。代码看起来像这样:

def save(self, *args, **kwargs):
    if not self.pk:
        # This code only happens if the objects is
        # not in the database yet. Otherwise it would
        # have pk
    super(MyModel, self).save(*args, **kwargs)
2020-04-03