def form_valid(self, form): data = form.cleaned_data user = User(username=data.get('username')) user.first_name = data.get('firstname') user.last_name = data.get('lastname') user.email = data.get('email') user.set_password(data.get('password')) user.is_active = False user.save() if data.get('role') == RESEARCHER: researcher = Researcher() researcher.user = user researcher.phone = data.get('phone') researcher.save() elif data.get('role') == STUDENT: student = Student() student.user = user student.school = School.objects.get( id=data.get('school')) # <select name=xxxx> defines this student.role = PEERLEADER student.save() else: advisor = Advisor() advisor.user = user advisor.school = School.objects.get(id=data.get('school')) advisor.save() return super(RegisterView, self).form_valid(form)
def form_valid(self, form): data = form.cleaned_data phones = [] first_names = [] last_names = [] default_name = 'N/A' for phone in data['phone_numbers'].split(','): phones.append(phone.strip()) for fn in data['first_names'].split(','): if not (fn.strip()): # if empty string, then default to 'N/A' first_names.append(default_name) else: first_names.append(fn.strip()) for ln in data['last_names'].split(','): if not (ln.strip()): # if empty string, then default to 'N/A' last_names.append(default_name) else: last_names.append(ln.strip()) #qs = User.objects.filter(username__in=phones) # this is not specific to school, so commented out qs = Student.objects.filter(user__username__in=phones, school__id=self.request.GET['school_id']) if qs: # TODO: refactor duplicate_nums = set(student.user.username for student in qs) duplicate_nums_str = ", ".join(duplicate_nums) error_msg = "Phone number(s): " + duplicate_nums_str + " already belong(s) to this organization. " + \ "If you'd like to update the info--such as first/last names--of these " + \ "number(s), please delete/remove first from the table above, and add them as a new entry. " + \ "Otherwise, remove the phone number(s) from the list below, and try again." form._errors[forms.forms.NON_FIELD_ERRORS] = ErrorList([error_msg]) return self.form_invalid(form) # We'll base block data entry on phone numbers because # they are the life-blood of our program len_first_names = len(first_names) len_last_names = len(last_names) for idx, phone in enumerate(phones): if not User.objects.filter(username=phone).exists(): user = User(username=phone) user.first_name = first_names[idx] if len_first_names > idx else default_name user.last_name = last_names[idx] if len_last_names > idx else default_name user.save() person = Student(user=user) person.school = School.objects.get(id=self.request.GET['school_id']) person.role = data['role'] person.save() else: # TODO: refactor this error_msg = "PHONE NUMBER ALREADY EXISTS: (" + phone + ") already exist in the database." # means user exists in the DB, but is NOT advisor (probably student or something else) if Advisor.objects.filter(user__username=phone).exists(): school_name = Advisor.objects.filter(user__username=phone).last().school.name error_msg += " We located it in organization named: " + school_name + "." elif Student.objects.filter(user__username=phone).exists(): school_name = Student.objects.filter(user__username=phone).last().school.name error_msg += " We located it in organization named: " + school_name + "." error_msg += " We do not allow duplicate phone numbers in the user database." + \ " If you'd like to add the user to this organization, please remove " + \ "him/her from the other organization and try again." form._errors[forms.forms.NON_FIELD_ERRORS] = ErrorList([error_msg]) return self.form_invalid(form) return HttpResponseRedirect(self.get_success_url())