def customer_import(request): """ 批量导入 :param request: :return: """ if request.method == 'GET': return render(request, 'customer_import.html') context = {'status': True, 'msg': '导入成功'} try: customer_excel = request.FILES.get('customer_excel') """ 打开上传的Excel文件,并读取内容 注:打开本地文件时,可以使用:workbook = xlrd.open_workbook(filename='本地文件路径.xlsx') """ workbook = xlrd.open_workbook(file_contents=customer_excel.file.read()) # sheet = workbook.sheet_by_name('工作表1') sheet = workbook.sheet_by_index(0) row_map = { 0: { 'text': '客户姓名', 'name': 'name' }, 1: { 'text': '年龄', 'name': 'age' }, 2: { 'text': '邮箱', 'name': 'email' }, 3: { 'text': '公司', 'name': 'company' }, } object_list = [] for row_num in range(1, sheet.nrows): row = sheet.row(row_num) row_dict = {} for col_num, name_text in row_map.items(): row_dict[name_text['name']] = row[col_num].value object_list.append(models.Customer(**row_dict)) models.Customer.objects.bulk_create(object_list, batch_size=20) except Exception as e: context['status'] = False context['msg'] = '导入失败' return render(request, 'customer_import.html', context)
def upload_excel_file(request): # 上传文件 if request.method == "GET": return render(request, 'upload_excel_file.html') user = request.POST.get('user') file_upload = request.FILES.get('customer_excel') # 获取excel文件对象 # 判断上传的文件后缀 if file_upload.name.rsplit('.', maxsplit=1)[1] not in ['xls', 'xlsx']: return HttpResponse('上传失败,只能上传xls格式') # 生成唯一的文件名 file_name = str(uuid.uuid4()) + '.' + file_upload.name.rsplit( '.', maxsplit=1)[1] # 拼接路径 img_file_path = os.path.join('static', 'files', file_name) print(img_file_path) with open(img_file_path, 'wb') as f: # 写入文件 for line in file_upload.chunks(): f.write(line) # 拼接excel文件的绝对路径 file_path = os.path.join(settings.BASE_DIR, img_file_path) print(file_path) # 打开excel表 data = xlrd.open_workbook(file_path) table = data.sheet_by_index(0) # 读取第一个sheet nrows = table.nrows # 获得总行数 date_list = [] # 定义空列表,用来批量插入 try: for i in range(1, nrows): # 读取每一行数据 rows = table.row_values(i) # 行的数据放在数组里 # 生成对象 obj_list = models.Customer( name=rows[0], age=rows[1], email=rows[2], company=rows[3], ) # 追加到列表中 date_list.append(obj_list) # 使用bulk_create批量插入 models.Customer.objects.bulk_create(date_list) # 删除上传的excel文件 os.remove(file_path) except Exception as e: return HttpResponse('批量添加失败{}'.format(e)) return redirect('/index/') # 跳转首页
def add(request): if request.method == 'POST': print("this is post") if request.POST['add_action'] == 'add_userprofile': print(request.POST) user_obj = User.objects.get(pk=int(request.POST['user'])) print(user_obj, type(user_obj)) form_data = { 'user': request.POST['user'], 'name': request.POST['name'] } request_form = myforms.UserProfileForm(form_data) if request_form.is_valid(): add_data = {'user': user_obj, 'name': request.POST['name']} new_profile = models.UserProfile(**add_data) new_profile.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) elif request.POST['add_action'] == 'add_course': print(request.POST) form_data = { 'name': request.POST['name'], 'price': request.POST['price'], 'online_price': request.POST['online_price'], 'brief': request.POST['brief'], } request_form = myforms.CourseForm(form_data) if request_form.is_valid(): new_profile = models.Course(**form_data) new_profile.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) elif request.POST['add_action'] == 'add_classlist': # teach=request.POST.getlist('teachers') # print(teach,type(teach)) form_data = { 'course': request.POST['course'], 'course_type': request.POST['course_type'], 'semester': request.POST['semester'], 'start_date_month': request.POST['start_date_month'], 'start_date_day': request.POST['start_date_day'], 'start_date_year': request.POST['start_date_year'], 'graduate_date_year': request.POST['graduate_date_year'], 'graduate_date_month': request.POST['graduate_date_month'], 'graduate_date_day': request.POST['graduate_date_day'], 'teachers': request.POST.getlist('teachers'), } request_form = myforms.ClassListForm(form_data) if request_form.is_valid(): course_obj = models.Course.objects.get( pk=int(request.POST['course'])) teachers_obj = [] for item in request.POST.getlist('teachers'): teacher_obj = models.UserProfile.objects.get(pk=int(item)) teachers_obj.append(teacher_obj) if int(request.POST['graduate_date_year']) == 0 or int( request.POST['graduate_date_month']) == 0 or int( request.POST['graduate_date_day']) == 0: graduate_date_value = None else: graduate_date_value = "%s-%s-%s" % ( int(request.POST['graduate_date_year']), int(request.POST['graduate_date_month']), int(request.POST['graduate_date_day'])) add_data = { 'course': course_obj, 'course_type': request.POST['course_type'], 'semester': int(request.POST['semester']), 'start_date': "%s-%s-%s" % (int(request.POST['start_date_year']), int(request.POST['start_date_month']), int(request.POST['start_date_day'])), 'graduate_date': graduate_date_value, } new_classlist = models.ClassList(**add_data) new_classlist.save() classlist_obj = models.ClassList.objects.filter( course=add_data['course'], course_type=add_data['course_type'], semester=add_data['semester']).first() for teacher_obj in teachers_obj: classlist_obj.teachers.add(teacher_obj) classlist_obj.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) elif request.POST['add_action'] == 'add_customer': print("customer_data", request.POST) form_data = { 'qq': request.POST['qq'], 'name': request.POST['name'], 'phone': int(request.POST['phone']), 'stu_id': request.POST['stu_id'], 'source': request.POST['source'], 'referral_from': request.POST['referral_from'], # 可能需要修改 'course': request.POST['course'], 'class_type': request.POST['class_type'], 'customer_note': request.POST['customer_note'], 'status': request.POST['status'], 'consultant': request.POST['consultant'], #'date':request.POST['date'], auto_add 属性后前台页面不显示这个字段 'class_list': request.POST.getlist('class_list'), } request_form = myforms.CustomerForm(form_data) if request_form.is_valid(): if request.POST['referral_from'] == '': referral_num = 0 else: referral_num = int(request.POST['referral_from']) referral_obj = models.Customer.objects.filter( pk=referral_num).first() course_obj = models.Course.objects.get( pk=int(request.POST['course'])) consultant_obj = models.UserProfile.objects.get( pk=int(request.POST['consultant'])) class_list_obj = [] for item in request.POST.getlist('class_list'): clist_obj = models.ClassList.objects.get(pk=int(item)) class_list_obj.append(clist_obj) add_data = { 'qq': request.POST['qq'], 'name': request.POST['name'], 'phone': int(request.POST['phone']), 'stu_id': request.POST['stu_id'], 'source': request.POST['source'], 'referral_from': referral_obj, # 可能需要修改 'course': course_obj, 'class_type': request.POST['class_type'], 'customer_note': request.POST['customer_note'], 'status': request.POST['status'], 'consultant': consultant_obj, } new_customer = models.Customer(**add_data) new_customer.save() customer_obj = models.Customer.objects.filter( qq=add_data['qq']).first() for clist_obj in class_list_obj: customer_obj.class_list.add(clist_obj) customer_obj.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) elif request.POST['add_action'] == 'add_consultrecord': print("consultant_data", request.POST) form_data = { 'customer': request.POST['customer'], 'note': request.POST['note'], 'status': request.POST['status'], 'consultant': request.POST['consultant'], #'date':request.POST['date'], auto_add 属性后前台页面不显示这个字段 } request_form = myforms.ConsultRecordForm(form_data) if request_form.is_valid(): customer_obj = models.Customer.objects.filter( pk=int(request.POST['customer'])).first() consultant_obj = models.UserProfile.objects.get( pk=int(request.POST['consultant'])) add_data = { 'customer': customer_obj, 'note': request.POST['note'], 'status': request.POST['status'], 'consultant': consultant_obj, } new_consultrecord = models.ConsultRecord(**add_data) new_consultrecord.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) elif request.POST['add_action'] == 'add_courserecord': print("courserecord_data", request.POST) form_data = { 'course': request.POST['course'], 'day_num': int(request.POST['day_num']), 'teacher': request.POST['teacher'] } request_form = myforms.CourseRecordForm(form_data) if request_form.is_valid(): course_obj = models.ClassList.objects.filter( pk=int(request.POST['course'])).first() teacher_obj = models.UserProfile.objects.get( pk=int(request.POST['teacher'])) add_data = { 'course': course_obj, 'day_num': int(request.POST['day_num']), 'teacher': teacher_obj } new_courserecord = models.CourseRecord(**add_data) new_courserecord.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) elif request.POST['add_action'] == 'add_studyrecord': print("studyrecord_data", request.POST) form_data = { 'course_record': request.POST['course_record'], 'student': request.POST['student'], 'record': request.POST['record'], 'score': int(request.POST['score']), 'note': request.POST['note'], } request_form = myforms.StudyRecordForm(form_data) if request_form.is_valid(): course_record_obj = models.CourseRecord.objects.filter( pk=int(request.POST['course_record'])).first() student_obj = models.Customer.objects.get( pk=int(request.POST['student'])) add_data = { 'course_record': course_record_obj, 'student': student_obj, 'record': request.POST['record'], 'score': int(request.POST['score']), 'note': request.POST['note'], } new_studyrecord = models.StudyRecord(**add_data) new_studyrecord.save() return HttpResponseRedirect('/index') else: print(request_form.errors) return render( request, 'error.html', { 'errors': request_form.errors, 'group': request.user.groups.all()[0].name }) else: print("this is get") if request.GET['action'] == 'add_userprofile': profiles = myforms.UserProfileForm() return render( request, "add.html", { 'addprofiles': profiles, 't_user_profile': 'true', 'group': request.user.groups.all()[0].name }) elif request.GET['action'] == 'add_course': course = myforms.CourseForm() return render( request, "add.html", { 'addcourses': course, 't_course': 'true', 'group': request.user.groups.all()[0].name }) elif request.GET['action'] == 'add_classlist': classlists = myforms.ClassListForm() return render( request, "add.html", { 'addclasslist': classlists, 't_classlist': 'true', 'group': request.user.groups.all()[0].name }) elif request.GET['action'] == 'add_customer': customers = myforms.CustomerForm() return render( request, "add.html", { 'addcustomer': customers, 't_customer': 'true', 'group': request.user.groups.all()[0].name }) elif request.GET['action'] == 'add_consultrecord': consultrecords = myforms.ConsultRecordForm() return render( request, "add.html", { 'addconsultrecord': consultrecords, 't_consultrecord': 'true', 'group': request.user.groups.all()[0].name }) elif request.GET['action'] == 'add_courserecord': courserecords = myforms.CourseRecordForm() return render( request, "add.html", { 'addcourserecord': courserecords, 't_courserecord': 'true', 'group': request.user.groups.all()[0].name }) elif request.GET['action'] == 'add_studyrecord': studyrecords = myforms.StudyRecordForm() return render( request, "add.html", { 'addstudyrecord': studyrecords, 't_studyrecord': 'true', 'group': request.user.groups.all()[0].name })
import django django.setup() from app01 import models import random course_choices = ( ('LinuxL', 'Linux中高级'), ('PythonFullStack', 'Python高级全栈开发'), ) sex_type = (("male", "男"), ("female", "女")) source_type = ( ('qq', "qq群"), ('referral', "内部转介绍"), ('website', "官方网站"), ('baidu_ads', "百度推广"), ('office_direct', "直接上门"), ('WoM', "口碑"), ('public_class', "公开课"), ('website_luffy', "路飞官网"), ('others', "其它"), ) obj_list = [] for i in range(1000): obj_list.append( models.Customer( qq=F"{random.randint(1000000000,9999999999)}", name=f"liye{i}", sex=random.choice(sex_type)[0], source=random.choice(source_type)[0], course=random.choice(course_choices[0]), )) models.Customer.objects.bulk_create(obj_list)
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "crm01.settings") import django django.setup() import random from app01 import models customer_objs = [] for i in range(1, 101): customer_obj = models.Customer( qq=''.join(random.choices([str(n) for n in range(1, 10)], k=11)), name=f'客户{i}', sex=random.choice(('male', 'female')), source=random.choice( ('qq', 'referral', 'website', 'baidu_ads', 'office_direct', 'WoM', 'public_class', 'website_luffy', 'others')), course=random.sample(('LinuxL', 'PythonFullStack'), k=random.randint(1, 2)), class_type=random.choice(('fulltime', 'online', 'weekend')), ) customer_objs.append(customer_obj) models.Customer.objects.bulk_create(customer_objs) # print(''.join(random.choices([str(n) for n in range(1,10)],k=11))) print(random.sample(('LinuxL', 'PythonFullStack'), k=random.randint(1, 2)))
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoCRM.settings") import django django.setup() from app01 import models c_list = [] for i in range(521): obj = models.Customer( qq= f'{i+1}{i+2}{i+3}', name= f'name{i}', course=['LinuxL',] ) c_list.append(obj) models.Customer.objects.bulk_create(c_list)