DJango之model_to_dict
导包:from django.forms import model_to_dict
作用:将queryset类型数据转换成字典
def get(self, request, *args, **kwargs): pk = kwargs.get('pk') print(request.GET.dict()) if pk: que = model_to_dict(Goods.objects.get(id=pk)) print(que) #{'id': 1, 'title': '女朋友', 'num': 1, 'price': Decimal('23.56'), 'desc': '注意肾虚'} return JsonResponse(que)
将查询出来的jquery对象变成字典, 方便使用json序列化
这里我为什么写request.GET.dict()
这是因为容易搞混queryset类型和querydict类型数据。
queryset都是从模型对象中获取的数据。
当获取request.GET和request.POST的数据,他们是querydict类型,他们可以用dict()方法。直接将query.dict转换成dict类型数据。request.GET.dict()
,get请求拼接?gg=1当使用dict方法后 获取字典 {‘gg‘: ‘1‘},POST的表单请求也是一样
将queryset类型数据转换成字典方法二
__dict__
方法
示例代码:
def get(self, request, *args, **kwargs): pk = kwargs.get('pk') print(request.GET.dict()) if pk: queryset =Goods.objects.get(id=pk).__dict__ print(queryset) #获取数据{'_state': <django.db.models.base.ModelState object at 0x0000020B161DD4A8>, 'id': 1, 'title': '女朋友', 'num': 1, 'price': Decimal('23.56'), 'desc': '注意肾虚'} 但他有一个私密属性,咱们需要给他pop删除,即可 queryset.pop("_state") print(queryset) #{'id': 1, 'title': '女朋友', 'num': 1, 'price': Decimal('23.56'), 'desc': '注意肾虚'} return JsonResponse(queryset)
这种方法优点就是写法简单,容易理解,代码量还少
但会发现多了个没用的_state
字段,同时当你有外键字段和ManyToManyField字段的数据,且不能按需显示输出,当我只需要其中几个字段时会有大量冗余数据,不建议使用
QueryDict对象
scrf_exempt是用来解决视图可以进行跨域请求。