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

 

posted @ 2021-12-22 17:07  linuxTang  阅读(42)  评论(0)    收藏  举报