def confirm_teams(request, t): sorted_post = sorted(request.POST.items()) added_teams = 0 for i in range(0, len(sorted_post) - 1, 4): # Sort through the items advancing 4 at a time instititution_id = sorted_post[i][1] team_name = sorted_post[i + 1][1] team_name = enforce_length(team_name, 'reference', Team, request) use_prefix = False if (sorted_post[i + 2][1] == "yes"): use_prefix = True speaker_names = sorted_post[i + 3][1].split(',') institution = Institution.objects.get(id=instititution_id) if team_name and speaker_names and institution: extra_reference_limit = 0 extra_short_reference_limit = 0 if use_prefix: # Team references/short_references depend on institution names extra_reference_limit = len(institution.name) extra_short_reference_limit = len(institution.code) reference = enforce_length(team_name, 'reference', Team, request, extra_limit=extra_reference_limit) short_reference = enforce_length( team_name, 'short_reference', Team, request, extra_limit=extra_short_reference_limit) newteam = Team(institution=institution, reference=reference, short_reference=short_reference, tournament=t, use_institution_prefix=use_prefix) try: newteam.save() for speaker in speaker_names: name = enforce_length(speaker, 'name', Speaker, request) newspeaker = Speaker(name=name, team=newteam) newspeaker.save() added_teams += 1 except IntegrityError: messages.error( request, "Team '%s %s' Was not saved; probably because that team already exists." % (institution, team_name)) if added_teams > 0: messages.success( request, "%s Teams have been added" % int( (len(sorted_post) - 1) / 4)) return render(request, 'old_importer/data_index.html')
def _post_clean_speakers(self): """Validates the Speaker instances that would be created.""" for i, name in enumerate(self.cleaned_data.get('speakers', [])): try: speaker = Speaker(name=name) speaker.full_clean(exclude=('team',)) except ValidationError as errors: for field, e in errors: # replace field with `speakers` self.add_error('speakers', e)
def import_speakers(self): self.speakers = {} for team in self.root.findall('participants/team'): for speaker in team.findall('speaker'): speaker_obj = Speaker( team=self.teams[team.get('id')], name=speaker.text, gender=speaker.get('gender', ''), email=speaker.get('email', '')) speaker_obj.save() self.speakers[speaker.get('id')] = speaker_obj speaker_obj.categories.set([self.speaker_categories[sc] for sc in speaker.get('categories', "").split() if sc != ""])