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
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
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