def parse_individual(element: IndividualElement, tree): child = Person() # get names from element names = list(get_names(element)) # save legal name # assumes first name in list is primary name legal_name = LegalName() parse_name_dict(names[0], legal_name) legal_name.tree = tree legal_name.save() child.legal_name = legal_name # save alternate names for name_dict in names[1:]: alternate_name = AlternateName() parse_name_dict(name_dict, alternate_name) alternate_name.person = child alternate_name.tree = tree alternate_name.save() child.gender = parse_gender(get_value(element, tags.GEDCOM_TAG_SEX)) # Is saving related models necessary, or will it cascade? birth_event_element = get_next_child_element(element, tags.GEDCOM_TAG_BIRTH) if birth_event_element: child.birth_date = parse_event_date(birth_event_element) child.birth_location = parse_event_location(birth_event_element) death_event_element = get_next_child_element(element, tags.GEDCOM_TAG_DEATH) if death_event_element: child.death_date = parse_event_date(death_event_element) child.death_location = parse_event_location(death_event_element) child.living = 'Dead' # living defaults to Unknown; change to living = has birth year and not has death year? child.tree = tree child.save() return element.get_pointer(), child