郑文峰的博客 郑文峰的博客
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

zhengwenfeng

穷则变,变则通,通则久
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • python

    • 基础

    • 第三方库

    • django

      • django celery 结合使用
      • django rest_framework使用jwt
      • django rest_framework Authentication
      • django rest_framework异常处理
      • django rest_framework 自定义文档
      • django压缩文件下载
      • django rest_framework使用pytest单元测试
      • django restframework choice 自定义输出数据
      • django Filtering 使用
      • django viewset 和 Router 配合使用时报的错
      • django model的序列化
      • django中使用AbStractUser
      • django.core.exceptions.ImproperlyConfigured Application labels aren't unique, duplicates users
      • django 中 media配置
      • django 外键引用自身和on_delete参数
      • django 警告 while time zone support is active
      • django rest_framework 分页
    • flask

    • tornado

    • 其他

  • go

  • 其他

  • 编程
  • python
  • django
zhengwenfeng
2022-08-10

django model的序列化

网络传输数据现在流行的是json数据格式,所以非常需要将数据库查询的到对象数据序列化成json格式,然后返回给前端进行数据展示。

下面讨论在django中如何更方便的将model 序列化。

一个goods的modle如下。

 class Goods(models.Model):
    name = models.CharField(max_length=100, verbose_name="商品名")
    market_price = models.FloatField(default=0, verbose_name="市场价格")
    goods_front_image = models.ImageField(upload_to="goods/images/", null=True, blank=True, verbose_name="封面图")    
    .....

1
2
3
4
5
6

序列化一. 最原始的model序列化,比较繁琐..太不智能了.

goodList = Goods.objects.all()[:10]
for good in goodList:
    json_dict = {}
    json_dict["name"] = good.name                    
    json_dict["market_price"] = good.market_price
    json_dict["add_time"] = good.add_time
    json_list.append(json_dict)
1
2
3
4
5
6
7

序列化二.

from django.forms.models import model_to_dict

goodsList = Goods.objects.all()[:10]
for goods in goodsList:    json_list.append(model_to_dict(good))
1
2
3
4

通过使用model_to_dict 更方便的去序列化goods对象。唯一不足的是无法序列化ImageField字段。

在这里插入图片描述

序列化三.

goodsList = Goods.objects.all()[:10]
goods_json = serialize('json', goodList)
1
2

直接将整个goods list 进行序列化,更加方便的使用。但是虽然能够将ImageField序列化,但是得到的图片路径是从数据库中拿到的,并不是图片真实的路径,前端拿到后需要做处理才能使用。

在这里插入图片描述

最后,还有没有更方便的序列化方式呢,当然有,去了解下djangorestframework吧,后期我也会有写关于该框架的博客。

#python#django
上次更新: 2023/01/15, 15:47:48
django viewset 和 Router 配合使用时报的错
django中使用AbStractUser

← django viewset 和 Router 配合使用时报的错 django中使用AbStractUser→

最近更新
01
django rest_framework 分页
03-20
02
学习周刊-第03期-第09周
03-03
03
学习周刊-第02期-第08周
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2023 zhengwenfeng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式