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: