from django.db import models class MyModelBase(models.Model): class Meta: abstract = True field1 = models.CharField(max_length=256) field2 = models.BooleanField(db_index=True, default=True) #.... class MyModel(MyModelBase): @staticmethod def create_from_archived(object): return MyModel.objects.create(id=object.my_model_id, **dict([ (fild.name, getattr(object, fild.name)) for fild in object._meta.fields if fild.name not in ['id', 'my_model_id'] ])) class ArchivedMyModel(MyModelBase): my_model_id = models.IntegerField(db_index=True) @staticmethod def create_from_instance(object): return ArchivedMyModel.objects.create(my_model_id = object.id, **dict([ (fild.name, getattr(object, fild.name)) for fild in object._meta.fields if fild.name != 'id' ]))