class Area(models.Model): """ 行政区划 """ # 创建 name 字段,用户保存名称 name = models.CharFIEld(max_length=20,verbose_name='名称') 自关联字段 parent 第一个参数是 self : parent关联自己. on_delete=models.SET_NulL: 如果省删掉了,省内其他的信息为 NulL related_name='subs': 设置之后 我们就这样调用获取市: area.area_set.all() ==> area.subs.all() parent = models.ForeignKey('self'models.SET_NulL,related_name='subsTrue,blank=上级行政区划) Meta: db_table = tb_areas verbose_name = 行政区划 verbose_name_plural = ' def __str__(self): return self.name自关联字段的外键指向自身,所以
ForeignKey('self')
需要使用related_name
指明查询一个行政区划的所有下级行政区划时,使用哪种语法查询,如本模型类中指明通过Area模型类对象.subs查询所有下属行政区划,而不是使用Django默认的Area模型类对象.area_set语法。请求省份数据请求方式: GET /areas/from django.vIEws import VIEwfrom areas.models Areafrom django http ProvinceAreasVIEw(VIEw): 省级地区""" def get(self,request): 提供省级地区数据 1.查询省级数据 2.序列化省级数据 3.响应省级数据 4.补充缓存逻辑 """
# 增加: 判断是否有缓存 province_List = cache.get('province_List') if not province_List: try: province_model_List = Area.objects.filter(parent__isnull=True) province_List = [] for province_model in province_model_List: province_List.append({'ID': province_modelID'name'.name}) # 增加: 缓存省级数据 cacheset('province_List'3600) except Exception as e: return http.JsonResponse({'code': 400,'errmsg': '省份数据错误'}) return http.JsonResponse({'code': 0,'errmsg': 'OK','province_List': province_List})
请求市区数据请求方式: GET /areas/(?P<pk>[1-9]\d+)/
SubareasVIEw(VIEw): 子级地区:市和区县提供市或区地区数据 1.查询市或区数据 2.序列化市或区数据 3.响应市或区数据 4.补充缓存数据 """ 判断是否有缓存 sub_data = cache.get(sub_area_' + pk) if not sub_data: 1.查询市或区数据 try: sub_model_List = Area.objects.filter(parent=pk) 查询市或区的父级 parent_model = Area.objects.get(ID=pk) 2.序列化市或区数据 sub_List = [] for sub_model in sub_model_List: sub_List.append({ID': sub_model.ID,name: sub_model.name}) sub_data = { ':parent_model.ID, pk :parent_model.name,: sub_List } 缓存市或区数据 cache.set(' + pk,sub_data,3600) except Exception as e: return http.JsonResponse({code': 400errmsg': 城市或区县数据错误}) 3.响应市或区数据 : 0,1)">OKsub_data': sub_data})
总结
以上是内存溢出为你收集整理的Django--省市区三级联动全部内容,希望文章能够帮你解决Django--省市区三级联动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)