from django.shortcuts import reverse, redirect from django.views.generic import CreateView, UpdateView from user.forms import StuRegisterForm, TeaRegisterFrom, StuUpdateForm, TeaUpdateForm from user.models import Student, Teacher import random # class CreateStudentView(CreateView): model = Student form_class = StuRegisterForm template_name = "user/register.html" success_url = "login" def form_valid(self, form): grade = form.cleaned_data['grade'] student_set = Student.objects.filter(grade=grade).order_by("-number") # 年级号是学生注册时自己选择的,子学号是注册时按照其年级内注册的先后顺序生成的 if student_set.count() > 0: last_student = student_set[0] new_number = str(int(last_student.number) + 1) for i in range(6 - len(new_number)): new_number = '0' + new_number else: new_number = '000001' # 创建新的学生实例,但不保存 new_student = form.save(commit=False) # 修改学生 new_student.number = new_number # 保存新实例 new_student.save() # 保存表单的多对多数据 form.save_m2m() self.object = new_student uid = grade + new_number from_url = "register" base_url = reverse(self.get_success_url(), kwargs={'kind': 'student'}) # 学生注册成功后,会返回到该重定向页面所指向的网页, # 注册后的账号是后台生成的,注册者并不知道,所以重定向后需要将账号展示给注册者看 return redirect(base_url + '?uid=%s&from_url=%s' % (uid, from_url)) def get_context_data(self, **kwargs): context = super(CreateStudentView, self).get_context_data(**kwargs) context["kind"] = "student" return context class CreateTeacherView(CreateView): model = Teacher form_class = TeaRegisterFrom template_name = "user/register.html" success_url = "login" def form_valid(self, form): department_no = random.randint(0, 300) department_no = '{:0>3}'.format(department_no) teacher_set = Teacher.objects.filter(department_no=department_no).order_by("-number") if teacher_set.count() > 0: last_teacher = teacher_set[0] new_number = str(int(last_teacher.number) + 1) new_number = '{:0>7}'.format(new_number) else: new_number = '0000001' new_teacher = form.save(commit=False) new_teacher.department_no = department_no new_teacher.number = new_number new_teacher.save() form.save_m2m() self.object = new_teacher uid = department_no + new_number from_url = "register" base_url = reverse(self.get_success_url(), kwargs={'kind': 'teacher'}) return redirect(base_url + '?uid=%s&from_url=%s' % (uid, from_url)) def get_context_data(self, **kwargs): context = super(CreateTeacherView, self).get_context_data(**kwargs) context["kind"] = "teacher" return context class UpdateStudentView(UpdateView): model = Student form_class = StuUpdateForm template_name = "user/update.html" def get_context_data(self, **kwargs): context = super(UpdateStudentView, self).get_context_data(**kwargs) context.update(kwargs) context["kind"] = "student" return context def get_success_url(self): return reverse("course", kwargs={"kind": "student"}) class UpdateTeacherView(UpdateView): model = Teacher form_class = TeaUpdateForm template_name = "user/update.html" def get_context_data(self, **kwargs): context = super(UpdateTeacherView, self).get_context_data(**kwargs) context.update(kwargs) context["kind"] = "teacher" return context def get_success_url(self): return reverse("course", kwargs={"kind": "teacher"})