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

Comments

asinox (on May 13, 2012):
<p>Try this:</p> <p>from copy import deepcopy old_obj = deepcopy(obj) old_obj.id = None old_obj.save()</p>

#

Please login first before commenting.