def batch_update(request, editable_data, admin_class): errors = [] for row_data in editable_data: obj_id = row_data.get("id") try: if obj_id: obj = admin_class.model.objects.get(id=obj_id) model_form = forms.create_form(admin_class.model, list(row_data.keys()), admin_class, request=request, partial_update=True) form_obj = model_form(instance=obj, data=row_data) if form_obj.is_valid(): log_data = [{"changed": {}}] form_obj.save() if form_obj.has_changed(): messages.add_message( request, messages.SUCCESS, '''{model_name} "{obj}" 修改成功。'''.format( model_name=admin_class.model._meta. verbose_name, obj=form_obj.instance)) else: errors.append([form_obj.errors, obj]) except ValueError as e: return False, [e, obj] if errors: return False, errors return True, []
def table_change(request, app_name, model_name, obj_id): if app_name in site.enabled_admins: if model_name in site.enabled_admins[app_name]: admin_class = site.enabled_admins[app_name][model_name] obj = admin_class.model.objects.get(id=obj_id) fields = [] for field_obj in admin_class.model._meta.fields: if field_obj.editable: fields.append(field_obj.name) for field_obj in admin_class.model._meta.many_to_many: fields.append(field_obj.name) model_form = forms.create_form(fields, admin_class, request=request) if request.method == "GET": form_obj = model_form(instance=obj) elif request.method == "POST": # print("post:",request.POST) form_obj = model_form(request.POST, instance=obj) if form_obj.is_valid(): form_obj.validate_unique() if form_obj.is_valid(): form_obj.save() return render( request, 'kingadmin/table_change.html', { 'form_obj': form_obj, 'active_url': '/kingadmin/', 'model_verbose_name': admin_class.model._meta.verbose_name, 'model_name': admin_class.model._meta.model_name, 'app_name': app_name, 'admin_class': admin_class })
def batch_update(request, editable_data, admin_class): """table objects batch update , for list_editable feature""" errors = [] for row_data in editable_data: obj_id = row_data.get('id') try: if obj_id: print("editable data", row_data, list(row_data.keys())) obj = admin_class.model.objects.get(id=obj_id) model_form = forms.create_form(admin_class.model, list(row_data.keys()), admin_class, request=request, partial_update=True) form_obj = model_form(instance=obj, data=row_data) if form_obj.is_valid(): form_obj.save() else: print("list editable form", row_data, form_obj.errors) errors.append([form_obj.errors, obj]) except KeyboardInterrupt as e: return False, [e, obj] if errors: return False, errors return True, []
def table_add(request, app_name, table_name): #print("request :",request.POST) if app_name in site.enabled_admins: if table_name in site.enabled_admins[app_name]: fields = [] admin_class = site.enabled_admins[app_name][table_name] for field_obj in admin_class.model._meta.fields: if field_obj.editable: fields.append(field_obj.name) for field_obj in admin_class.model._meta.many_to_many: fields.append(field_obj.name) if admin_class.add_form == None: model_form = forms.create_form(admin_class.model, fields, admin_class, form_create=True, request=request) else: #this admin has customized creation form defined model_form = admin_class.add_form if request.method == "GET": form_obj = model_form() elif request.method == "POST": form_obj = model_form(request.POST) if form_obj.is_valid(): form_obj.validate_unique() if form_obj.is_valid(): print("add form valid", form_obj.cleaned_data) form_obj.save() if request.POST.get('_continue') is not None: redirect_url = '%s/%s/' % (re.sub( "add/$", "change", request.path), form_obj.instance.id) #print('redirect url',redirect_url) return redirect(redirect_url) elif request.POST.get("_add_another") is not None: #print('add another form', form_obj) form_obj = model_form() else: #return to table list page if "_popup=1" not in request.get_full_path(): redirect_url = request.path.rstrip("/add/") return redirect(redirect_url) return render( request, 'kingadmin/table_add.html', { 'form_obj': form_obj, 'model_name': admin_class.model._meta.model_name, 'model_verbose_name': admin_class.model._meta.verbose_name, 'model_db_table': admin_class.model._meta.db_table, 'admin_class': admin_class, 'app_name': app_name, 'active_url': '/kingadmin/', 'enabled_admins': site.enabled_admins }) else: raise Http404("url %s/%s not found" % (app_name, table_name))
def table_change(request, app_name, table_name, obj_id, embed=False): #print("table change:",app_name,table_name ,obj_id) if app_name in site.enabled_admins: if table_name in site.enabled_admins[app_name]: admin_class = site.enabled_admins[app_name][table_name] ##print(enabled_admins[table_name]) obj = admin_class.model.objects.get(id=obj_id) ##print("obj....change",obj) fields = [] for field_obj in admin_class.model._meta.fields: if field_obj.editable: fields.append(field_obj.name) for field_obj in admin_class.model._meta.many_to_many: fields.append(field_obj.name) ##print('fields', fields) model_form = forms.create_form(admin_class.model, fields, admin_class, request=request) if request.method == "GET": form_obj = model_form(instance=obj) elif request.method == "POST": print("post:", request.POST) form_obj = model_form(request.POST, instance=obj) if form_obj.is_valid(): form_obj.validate_unique() if form_obj.is_valid(): form_obj.save() return_data = { 'form_obj': form_obj, 'model_verbose_name': admin_class.model._meta.verbose_name, 'model_name': admin_class.model._meta.model_name, 'app_name': app_name, 'admin_class': admin_class, 'enabled_admins': site.enabled_admins } if embed: return return_data else: return render(request, 'kingadmin/table_change.html', return_data) else: raise Http404("url %s/%s not found" % (app_name, table_name))
def batch_update(request, editable_data, admin_class): """table objects batch update , for list_editable feature""" errors = [] for row_data in editable_data: obj_id = row_data.get('id') try: if obj_id: print("editable data", row_data, list(row_data.keys())) obj = admin_class.model.objects.get(id=obj_id) model_form = forms.create_form(admin_class.model, list(row_data.keys()), admin_class, request=request, partial_update=True) form_obj = model_form(instance=obj, data=row_data) if form_obj.is_valid(): form_obj.save() else: print("list editable form", row_data, form_obj.errors) errors.append([form_obj.errors, obj]) # for column in row_data: # if column != "id":#id no need change # #print("-----column",column,row_data[column],type(row_data[column])) # if row_data[column] in ('True','False'): # if obj._meta.get_field(column).get_internal_type() == "BooleanField": # setattr(obj, column, eval(row_data[column])) # #print("setting column [%s] to [%s]" %(column,row_data[column]), eval(row_data[column])) # else: # setattr(obj, column, row_data[column]) # else: # setattr(obj,column,row_data[column]) # # obj.save() #except Exception as e: except KeyboardInterrupt as e: return False, [e, obj] if errors: return False, errors return True, []
def table_add(request, app_name, model_name): if app_name in site.enabled_admins: if model_name in site.enabled_admins[app_name]: admin_class = site.enabled_admins[app_name][model_name] fields = [] for field_obj in admin_class.model._meta.fields: if field_obj.editable: fields.append(field_obj.name) for field_obj in admin_class.model._meta.many_to_many: fields.append(field_obj.name) if admin_class.add_form == None: model_form = forms.create_form(fields, admin_class, form_create=True, request=request) else: # this admin has customized creation form defined model_form = admin_class.add_form if request.method == 'GET': form_obj = model_form() elif request.method == "POST": form_obj = model_form(request.POST) if form_obj.is_valid(): form_obj.validate_unique() if form_obj.is_valid(): form_obj.save() return render( request, 'kingadmin/table_add.html', { 'form_obj': form_obj, 'model_name': admin_class.model._meta.model_name, 'model_verbose_name': admin_class.model._meta.verbose_name, 'model_db_table': admin_class.model._meta.db_table, 'admin_class': admin_class, 'app_name': app_name, 'active_url': '/kingadmin/', }) else: return Http404('url %s/%s not found' % (app_name, model_name))
def table_add(request, app_name, table_name, embed=False): """ :param request: :param app_name: :param table_name: :param embed: :return: """ if app_name in site.enabled_admins: if table_name in site.enabled_admins[app_name]: admin_class = site.enabled_admins[app_name][table_name] template_file = "kingadmin/table_add.html" fields = [] for field_obj in admin_class.model._meta.fields: if field_obj.editable: fields.append(field_obj.name) for field_obj in admin_class.model._meta.many_to_many: fields.append(field_obj.name) if admin_class.add_form is not None: custom_status = True else: custom_status = False model_form = forms.create_form(admin_class.model, fields, admin_class, form_creata=True, request=request, custom_status=custom_status) if request.method == "GET": if "_popup=4" in request.get_full_path(): template_file = "kingadmin/table_add_popup.html" fk_id = request.get("fk_id") field_name = request.GET.get("field_name") model_name = request.GET.get("model_name") if fk_id and field_name: if field_name == "content_type" and model_name: content_type = ContentType.objects.get( model=model_name).id form_obj = model_form(initial={ "content_type": content_type, "object_id": fk_id }) else: form_obj = model_form(initial={ field_name: fk_id, }) else: form_obj = model_form() elif request.method == "POST": form_obj = model_form(request.POST) if form_obj.is_valid(): form_obj.validate_unique() if form_obj.is_valid(): new_object = form_obj.save() log_data = [{"added": {}}] admin_class.log_addition(request, new_object, log_data) messages.add_message( request, messages.SUCCESS, mark_safe( '''{model_name} <a href='{obj_change_link}'>{obj}</a> 添加成功。''' .format(model_name=admin_class.model._meta. verbose_name, obj=form_obj.instance, obj_change_link= "/kingadmin/%s/%s/change/%s/" % (app_name, table_name, form_obj.instance.pk)))) # 定制的批量操作, (路飞学城优惠券批量生成) method_name = "bulk_create_%s" % table_name if hasattr(admin_class, method_name): getattr(admin_class, method_name)(new_object) if request.POST.get("_continue") is not None: redirect_url = '%s/%s/' % (re.sub( "add/$", "change", request.path), form_obj.instance.id) return redirect(redirect_url) elif request.POST.get("_add_another") is not None: fk_id = request.GET.get("fk_id") field_name = request.GET.get("field_name") model_name = request.GET.get("model_name") if fk_id and field_name: if field_name == "content_type" and model_name: content_type = ContentType.objects.get( model=model_name).id form_obj = model_form( initial={ "content_type": content_type, "object_id": fk_id }) else: form_obj = model_form(initial={ field_name: fk_id, }) else: form_obj = model_form() return redirect(request.get_full_path() or admin_class.object_add_link) else: # return to table list page if "_popup=4" not in request.get_full_path(): redirect_url = re.sub("add/$", "", request.path) return redirect(redirect_url) else: template_file = 'kingadmin/table_add_popup.html' return_data = { 'form_obj': form_obj, 'model_name': admin_class.model._meta.model_name, 'model_verbose_name': admin_class.model._meta.verbose_name, 'model_db_table': admin_class.model._meta.db_table, 'admin_class': admin_class, 'app_name': app_name, 'enabled_admins': site.enabled_admins, 'cid': request.GET.get('cid'), 'chapter_num': request.GET.get('chapter_num') } if embed: return return_data else: if request.method == "POST" and not form_obj.errors and "_popup=4" not in request.get_full_path( ): return redirect("/kingadmin/{app}/{table}/".format( app=app_name, table=table_name)) return render(request, template_file, return_data) else: raise Http404("url %s/%s not found" % (app_name, table_name))
def table_change(request, app_name, table_name, obj_id, embed=False): """ :param request: :param app_name: :param table_name: :param obj_id: :param embed: :return: """ if app_name in site.enabled_admins: if table_name in site.enabled_admins[app_name]: admin_class = site.enabled_admins[app_name][table_name] obj = admin_class.model.objects.get(id=obj_id) fields = [] for field_obj in admin_class.model._meta.fields: if field_obj.editable: fields.append(field_obj.name) for field_obj in admin_class.model._meta.many_to_many: fields.append(field_obj.name) if admin_class.add_form is not None: custom_status = True else: custom_status = False model_form = forms.create_form(admin_class.model, fields, admin_class, request=request, custom_status=custom_status) if request.method == "GET": form_obj = model_form(instance=obj) elif request.method == "POST": old_data = serializers.serialize("json", [obj]) form_obj = model_form(request.POST, instance=obj) if form_obj.is_valid(): form_obj.validate_unique() if form_obj.is_valid(): log_data = [{"change": {}}] form_obj.save() messages.add_message( request, messages.SUCCESS, mark_safe( '''{model_name} <a href='{obj_change_link}'>{obj}</a> 修改成功。''' .format(model_name=admin_class.model._meta. verbose_name, obj=form_obj.instance, obj_change_link=request.path))) new_object = form_obj.instance field_data_before_change = utils.fetch_changed_data( old_data, form_obj.changed_data) log_data[0]["changed"][ "changed_to"] = utils.get_specified_data( new_object, form_obj.changed_data) log_data[0]["changed"][ "old_data"] = field_data_before_change admin_class.log_change(request, new_object, log_data) return_data = { "form_obj": form_obj, "model_verbose_name": admin_class.model._meta.verbose_name, "model_name": admin_class.model._meta.model_name, "app_name": app_name, "admin_class": admin_class, "enabled_admins": site.enabled_admins, } if embed: return return_data else: if request.method == "POST" and not form_obj.errors: return redirect("/kingadmin/{app}/{table}/".format( app=app_name, table=table_name)) return render(request, 'kingadmin/table_change.html', return_data) else: raise Http404("url %s/%s not found" % (app_name, table_name))
def enrollment(request,customer_id): #form = forms.EnrollmentForm() fields = [] for field_obj in models.Enrollment._meta.fields: if field_obj.editable: fields.append(field_obj.name) #print('fields:',fields) customer_obj = models.Customer.objects.get(id=customer_id) model_form = king_admin_forms.create_form(models.Enrollment, fields, site.enabled_admins[models.Enrollment._meta.db_table]) form = model_form() response_msg = {} if request.method == "POST": if request.POST.get('paid_fee'): #payment form # 交费纪录 fields = [] for field_obj in models.PaymentRecord._meta.fields: if field_obj.editable: fields.append(field_obj.name) model_form = king_admin_forms.create_form(models.PaymentRecord, fields, site.enabled_admins[models.PaymentRecord._meta.db_table]) form = model_form(request.POST) if form.is_valid(): form.save() enroll_obj = form.instance.enrollment customer_obj.status = "signed" # customer_obj.save() response_msg = {'msg': 'payment record got created,enrollment process is done', 'code': 4, 'step': 5,} else: enroll_obj = None return render(request, 'crm/enrollment.html', {'response': response_msg, 'payment_form': form, 'customer_obj': customer_obj, 'enroll_obj': enroll_obj}) post_data = request.POST.copy() print("post:",request.POST) form = model_form(post_data) exist_enrollment_objs = models.Enrollment.objects.filter(customer=customer_obj,course_grade=request.POST.get('course_grade')) if exist_enrollment_objs: if exist_enrollment_objs.filter(contract_agreed=True): #学生已填写完报名表 enroll_obj = exist_enrollment_objs.get(contract_agreed=True) if enroll_obj.contract_approved or request.POST.get('contract_approved') == "on": enroll_obj.contract_approved = True enroll_obj.save() if enroll_obj.paymentrecord_set.select_related().count() >0: #already has payment record response_msg = {'msg': '已报名成功', 'code': 5, 'step': 6} return render(request, 'crm/enrollment.html', {'response': response_msg, 'customer_obj':customer_obj}) else: response_msg = {'msg': 'contract approved, waiting for payment record to be created', 'code': 3, 'step': 4} #交费纪录 fields = [] for field_obj in models.PaymentRecord._meta.fields: if field_obj.editable: fields.append(field_obj.name) model_form = king_admin_forms.create_form(models.PaymentRecord, fields, site.enabled_admins[models.PaymentRecord._meta.db_table]) form = model_form() return render(request, 'crm/enrollment.html', {'response': response_msg, 'payment_form': form, 'customer_obj': customer_obj, 'enroll_obj':enroll_obj}) else: response_msg = {'msg': 'waiting for contract approval', 'code':2,'step':3, 'enroll_boj':enroll_obj} form = model_form(post_data, instance=enroll_obj) else: response_msg = {'msg':'enrollment_form already exist', 'code':1,'step':2, 'enroll_obj':exist_enrollment_objs[0], } form.add_error('customer', '报名表已存在') #form.cleaned_data['customer'] = customer_obj if form.is_valid(): form.save() response_msg = {'msg': 'enrollment_form created', 'enroll_obj':form.instance,'code': 1, 'step': 2} else: response_msg = {'msg': 'create enrollment form', 'code': 0, 'step': 1} return render(request,'crm/enrollment.html',{'response':response_msg, 'enrollment_form':form, 'customer_obj':customer_obj, })