Python 如何向所有模型添加相同的保存方法

Python 如何向所有模型添加相同的保存方法,python,mysql,django,django-models,Python,Mysql,Django,Django Models,我有以下型号: class Series(models.Model): item_id = models.CharField(max_length=60, unique=True, blank=True) name = models.CharField(max_length=600, blank=True) def save(self, *args, **kwargs): super(self.__class__, self).save(*args, *

我有以下型号:

class Series(models.Model):
    item_id = models.CharField(max_length=60, unique=True, blank=True)
    name = models.CharField(max_length=600, blank=True)

    def save(self, *args, **kwargs):
        super(self.__class__, self).save(*args, **kwargs)
        if not self.item_id:
            self.item_id = '%s%s' % (self.__class__.__name__[0], self.pk)
            self.save()
我已经创建了这个通用的保存方法,我还想将它应用于其他模型。如何在
models.py
文件中执行此操作?

2选项(两者非常相似,它们以微妙的方式变化):

  • 创建父类:

    class MyModel(models.Model):
        """My Custom Model Class"""
        def save(self, *args, **kwargs):
            super(self.__class__, self).save(*args, **kwargs)
            if not self.item_id:
                self.item_id = '%s%s' % (self.__class__.__name__[0], self.pk)
                self.save()
        # Must make the parent Model abstract to avoid table creation
        class Meta:
            abstract = True
    
    class Series(MyModel):
        item_id = models.CharField(max_length=60, unique=True, blank=True)
        name = models.CharField(max_length=600, blank=True)
    
  • 创建一个Mixin

    class MySaveMixin(object):
        """My Mixin for providing save functionality to Models"""
        def save(self, *args, **kwargs):
            super(self.__class__, self).save(*args, **kwargs)
            if not self.item_id:
                self.item_id = '%s%s' % (self.__class__.__name__[0], self.pk)
                self.save()
    
    class Series(models.Model, MySaveMixin):
        item_id = models.CharField(max_length=60, unique=True, blank=True)
        name = models.CharField(max_length=600, blank=True)
    

  • 创建一个包含save方法的mixin类,并为每个模型扩展它。必须将父类抽象化,否则最终会出现可怕的多表继承场景。