Login

Copy a model instance

Author:
miracle2k
Posted:
September 9, 2008
Language:
Python
Version:
1.0
Tags:
model copy
Score:
3 (after 3 ratings)

Create a copy of a model instance.

Works in model inheritance case where instance.pk = None is not good enough, since the subclass instance refers to the parent_link's primary key during save.

M2M relationships are currently not handled, i.e. they are not copied.

See also Django #4027.

1
2
3
4
5
6
7
from django.db.models import AutoField
def copy_model_instance(obj):
    initial = dict([(f.name, getattr(obj, f.name))
                    for f in obj._meta.fields
                    if not isinstance(f, AutoField) and\
                       not f in obj._meta.parents.values()])
    return obj.__class__(**initial)

More like this

  1. Clone model mixin by zakj 6 years, 2 months ago
  2. Duplicate related objects of model instance by johnboxall 6 years, 1 month ago
  3. ImportObject: Import model *instance* specific code at runtime by guettli 5 years, 6 months ago
  4. Copy/Paste form generation by dballanc 7 years, 3 months ago
  5. CustomQueryManager by zvoase 6 years, 7 months ago

Comments

asinox (on May 13, 2012):

Try this:

from copy import deepcopy old_obj = deepcopy(obj) old_obj.id = None old_obj.save()

#

Please login first before commenting.