1 def add_view(self,request,*args,**kwargs):
2 model_form_class = self.get_model_form_class()
3 _popbackid = request.GET.get('_popbackid')
4 if request.method == "GET":
5 form = model_form_class()
6 return render(request,'stark/add_view.html',{'form':form,'config':self})
7 else:
8 form = model_form_class(request.POST)
9 if form.is_valid():
10 # 数据库中创建数据
11 new_obj = form.save()
12 print('new_obj',str(new_obj))
13 if _popbackid:
14 # 是popup请求
15 # render一个页面,写自执行函数
16 # popUp('/stark/app01/userinfo/add/?_popbackid=id_consultant&model_name=customer&related_name=consultant')
17
18 from django.db.models.fields.reverse_related import ManyToOneRel, ManyToManyRel
19 result = {'status':False,'id':None,'text':None,'popbackid':_popbackid}
20 model_name = request.GET.get('model_name') # 获得当前所在的类名 customer
21 related_name = request.GET.get('related_name') # 获得related_name consultant related_name = request.GET.get('related_name') #获得related_name
22 # print(model_name,related_name,new_obj._meta.model_name) customer consultant userinfo
23 for related_obj in new_obj._meta.related_objects:
24 _model_name = related_obj.model._meta.model_name # 当前增加的表的名称
25 _related_name = related_obj.related_name # 当前表关联的related_name
26
27 if type(related_obj) == ManyToOneRel: # 判断如果是FK的话
28 _field_name = related_obj.field_name # code (to_field) 关联的字段
29 else:
30 _field_name = 'pk'
31 _limit_choices_to = related_obj.limit_choices_to
32 print('471_limit_choices_to',_limit_choices_to)
33 if model_name == _model_name and related_name == str(_related_name):
34 is_exists = self.model_class.objects.filter(**_limit_choices_to,pk=new_obj.id).exists()
35 if is_exists:
36 # 如果是新创建用户是销售部的人, 页面才会显示该新增选项
37 result['status'] = True
38 result['text'] = str(new_obj)
39 result['id'] = getattr(new_obj,_field_name)
40 print(result)
41 return render(request, 'stark/popup_response.html',{'json_result': json.dumps(result, ensure_ascii=False)})
42 # result = {'id':new_obj.pk, 'text':str(new_obj),'popbackid':_popbackid }
43 return render(request,'stark/popup_response.html',{'json_result':json.dumps(result,ensure_ascii=False)})
44 else:
45 return redirect(self.get_list_url())
46 return render(request, 'stark/add_view.html', {'form': form,'config':self})