Privacy Policy
Snippets index

  Clone a django model object

Example:

from django.core.exceptions import PermissionDenied
...

def clone(self, request=None, program_steps=None):

    if request and not request.user.has_perm('backend.add_program'):
        raise PermissionDenied

    obj = Program.objects.get(id=self.id)
    obj.pk = uuid.uuid4()
    obj.description = _('copy of') + ' ' + self.description
    obj.created = datetime.datetime.now()
    obj.updated = datetime.datetime.now()
    obj.created_by = request.user if request is not None else None
    obj.updated_by = request.user if request is not None else None
    obj.save()

    if program_steps is None:
        # Clone our own steps
        for step in self.steps.all():
            step_clone = ProgramStep.objects.get(id=step.id)
            step_clone.pk = uuid.uuid4()
            step_clone.program = obj
            step_clone.save()
    else:
        # Add user supplied steps (used by "save as")
        for step in program_steps:
            new_step = ProgramStep(
                program=obj,
                function=step['function'],
                parameters=step['parameters'],
                position=step['position'],
            )
            new_step.save()

    return obj

or:

# After duplicating an entry, you must set the many-to-many relations for the new entry

entry = Entry.objects.all()[0] # some previous entry
old_authors = entry.authors.all()
entry.pk = None
entry.save()
entry.authors.set(old_authors)

See also: