DJango之model_to_dict

Posted zzsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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是用来解决视图可以进行跨域请求。

以上是关于DJango之model_to_dict的主要内容,如果未能解决你的问题,请参考以下文章

django model_to_dict ‘QuerySet‘ object has no attribute ‘_meta‘

django 将model转换为字典

django数据读取序列化

如何在 Django Summernote 中显示编程片段的代码块?

model_to_dict 没有返回带有 auto_now_add = True 的 DateTimeField

在 Django 中获取当前服务器 ip 或域