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
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
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
2
3
4
通过使用model_to_dict
更方便的去序列化goods对象。唯一不足的是无法序列化ImageField
字段。
序列化三.
goodsList = Goods.objects.all()[:10]
goods_json = serialize('json', goodList)
1
2
2
直接将整个goods list 进行序列化,更加方便的使用。但是虽然能够将ImageField
序列化,但是得到的图片路径是从数据库中拿到的,并不是图片真实的路径,前端拿到后需要做处理才能使用。
最后,还有没有更方便的序列化方式呢,当然有,去了解下djangorestframework
吧,后期我也会有写关于该框架的博客。
上次更新: 2023/05/01, 18:02:43