wrufesh wrufesh - 11 months ago 61
Python Question

Wagtail: How can I copy a page instance in wagtail with all its property and method

I have a CoursePage model in Wagtail site.

class CoursePage(Page):
.....
institute = models.ForeignKey(Institute)
.....


I have a django models ForeignKey field in it named institute

I want to make a copy of its instance programmatically so that the newly created instance institute field can be modified.

I tried django approach of copying model instance, that is:

course = CoursePage.objects.all()[0]
course.pk = None
course.save()


But it doesnot work out.
It only works with the model inherited with django models.Model. but not with the model inherited with Page

Answer Source

The Page model implements a copy method to do this:

def copy(self, recursive=False, to=None, update_attrs=None,
         copy_revisions=True, keep_live=True, user=None):

The parameters it accepts are:

  • recursive - if true, copies child pages as well
  • to - the page to create the new copy under (defaults to creating a sibling of the existing page)
  • update_attrs - a dict of fields to update while copying, such as {'institute': other_institute}
  • copy_revisions - whether to copy revision history
  • keep_live - whether to copy the 'live' status
  • user - the owner of the new page, for permission purposes