# Related Threat Actor (by id)
ta = ThreatActor(title='Albino Rhino')
attrib_ta = Attribution()
attrib_ta.append(ThreatActor(idref=ta.id_))
campaign.attribution.append(attrib_ta)

# Related Campaign (basic; by id)
campaign2 = Campaign(title='Another Campaign')
cassoc_campaign = CAssociatedCampaigns()
cassoc_campaign.append(RelatedCampaign(Campaign(idref=campaign2.id_)))
campaign.associated_campaigns = cassoc_campaign

# Related Other Objects to Campaign (by id)
campaign3 = Campaign(title='Another Another Campaign')
tassoc_campaign = TAssociatedCampaigns()
tassoc_campaign.append(RelatedCampaign(Campaign(idref=campaign3.id_)))
ta.associated_campaigns = tassoc_campaign
r = RelatedCampaignRef(CampaignRef(idref=campaign3.id_))
indicator.add_related_campaign(r)

# Generate STIX Package
stix_package = STIXPackage()
stix_package.add_campaign(campaign)
stix_package.add_ttp(ttp)
stix_package.add_incident(incident)
stix_package.add_indicator(indicator)
stix_package.add_threat_actor(ta)
stix_package.add_campaign(campaign2)

print(stix_package.to_xml().decode())