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)
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类,并为每个模型扩展它。必须将父类抽象化,否则最终会出现可怕的多表继承场景。