Django insert with multiple nested models performance

I have following models definition:

class Workflow(models.Model):
    name = models.CharField(max_length=255)

class Step(models.Model):
    workflow = models.ForeignKey(Section, on_delete=models.CASCADE, related_name='steps')
    title = models.CharField(max_length=255)

class Section(models.Model):
    body = models.CharField(max_length=255)
    step = models.ForeignKey(Section, on_delete=models.CASCADE, related_name='sections')

class Question(models.Model):
    description = models.CharField(max_length=255)
    section = models.ForeignKey(Section, on_delete=models.CASCADE, related_name='questions')

class Option(models.Model):
    set_fail = models.BooleanField()
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='options')

class Action(models.Model):
    yes_no = models.BooleanField()
    option = models.ForeignKey(Option, on_delete=models.CASCADE, related_name='actions')

# Workflow -> Step -> Section -> Question -> Option -> Action

And I have following body sent from client for inserting data (request body is big, I can't paste it here)

https://jsoneditoronline.org/?id=e970abc01b2a489c9933464867d11eaf

You can see the data is big and each level has multiple records, then performing insert really takes time.

I am currently applying this inserting approach:

class WorkflowUpdateSerializer(serializers.Serializer):

    def update(self, workflow, data):
        self.update_steps(workflow, data) # data is request JSON body

    def update_steps(self, workflow, steps):
        step_clones = [{key: value for key, value in step.items() if key != 'sections'} for step in steps]

        step_instances = Step.objects.bulk_create(
            [Step(workflow=workflow, **step) for step in step_clones])

        for index, step in enumerate(steps):
            self.update_sections(step_instances[index], step.pop('sections'))

    def update_sections(self, step, sections):
        section_clones = [{key: value for key, value in section.items() if
                           key != 'questions'} for section in sections]

        section_instances = Section.objects.bulk_create(
            [Section(step=step, **section) for section in section_clones])

        for index, section in enumerate(sections):
            self.update_questions(section=section_instances[index], questions=section.pop('questions'))

    def update_questions(self, section, questions):
    # code

    def update_options(self, question, options):
    # code

    def update_actions(self, option, actions):
    # code

Do you have any ideas to improve this?

Thanks.