diango完成站点部门子部门及部门编号
1编写模板:
备注:参考了省市区自我关联思路
class Deparement(models.Model): name = models.CharField(max_length=20, verbose_name='部门名称') site_id = models.CharField(max_length=20, verbose_name='站点名称') cost_center = models.CharField(max_length=50, default='',verbose_name='成本中心') parent = models.ForeignKey('self',on_delete=models.CASCADE,related_name='departs',blank=True, null=True,default='',verbose_name='上级部门编号') class Meta: db_table = 'tb_depart' verbose_name = '部门成本中心' verbose_name_plural = '部门成本中心' def __str__(self): return self.name
2编写视图:
#部门成本中心 class DepartmentView(View): def get(self,request): deparement_id = request.GET.get('deparement_id') #查一级部门 if not deparement_id: try: #查一级部门 depart_model_list = Deparement.objects.filter(parent__isnull=True) #序列化一级部门数据 department_list = [] for department_model in depart_model_list: department_dict = { 'id':department_model.id, 'name':department_model.name } department_list.append(department_dict) return JsonResponse({'code':200,'department_list':department_list}) except Exception as e: result = {'code':202,'error':'你要查的一级部门不存在'} return JsonResponse(result) else: try: #查父级数据 parent_model = Deparement.objects.get(id=deparement_id) sub_model_list = parent_model.departs.all() subs = [] #拼接数据 for sub_model in sub_model_list: sub_dict = { 'id':sub_model.id, 'name':sub_model.name, 'site_id':sub_model.site_id, 'cost_center':sub_model.cost_center } subs.append(sub_dict) sub_data = { 'id':parent_model.id, 'name':parent_model.name, 'site_id':parent_model.site_id, 'subs':subs } return JsonResponse({'code':200,'sub_data':sub_data}) except Exception as e: result = {'code':202,'error':'子级部门数据不存在'} return JsonResponse(result)
3配置路由:
urlpatterns = [ path('admin/', admin.site.urls), path('v1/address/',include('department.urls')), ]
urlpatterns = [ #省市区三级联动 path('areas',views.AreasView.as_view()), path('depart',views.DepartmentView.as_view()), ]
4浏览器测试:
http://127.0.0.1:8000/v1/address/depart
http://127.0.0.1:8000/v1/address/depart?deparement_id=1

浙公网安备 33010602011771号