Hi,
I asked the same question earlier.
When ID is set to None and object is saved, the M2M fields are not
copied. They must be copied separately.
Caveats: the code below uses django internals and is very lightly tested.
def copy_m2m_fields(src, dst):
for m2m_field in src._meta.many_to_many:
attname = m2m_field.get_attname()
src_manager = getattr(src, attname)
# idea from django/core/serializers/python.py,base.py
# ... collect primary keys
ids = [related._get_pk_val() for related in src_manager.iterator()]
# ... assign id list to target field
setattr(dst, attname, ids)
dst.save()
Jacob Kaplan-Moss wrote:
> Hi Dave --
>
> I'm not sure what's going on in your code example, but there's a
> *much* easier way of copying an object::
>
> >>> o = MyModel.objects.get(pk=1)
> >>> o.id = None
> >>> o.save()
>
> By setting the ID (or whatever your primary key is called) to ``None``
> and calling save() you'll force Django to insert a new object instead
> of updating the existing one. All that monkeying with ``__dict__``
> isn't really needed.
>
> /me makes note to think about adding an ``obj.copy()`` method...
>
> Jacob
>
> >
>
>
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---