Django中一对多映射的正向查询和反向查询,以及query_set对象(查询结果集)的序列化,详解!

首先先举例一个一对多的映射对象,示例如下:

# 1.商品类型  - GoodeType
    # 1.title – 类型名称
    # 2.picture – 类型图片
    # 3.desc – 类型描述(提供给后台使用)
class GoodsType(models.Model):
  title = models.CharField(max_length=30,verbose_name='类型标题')
  # null=True表示的是可以为空
  picture = models.ImageField(upload_to='static/upload/goodstype',
    null=True,
    verbose_name='类型图片'
  )
  desc = models.TextField(verbose_name='类型描述')

  def __str__(self):
    return self.title

  # 因为json只能将列表,元组,字典转化为json字符串
  def to_dict(self):
    dic = {
      'title':self.title,
      # 其实保存在数据库中的是图片的地址,需要将地址转化为字符串
      # 在json序列化时会提示不是字符串,需要强制转换为字符串
      'picture':self.picture.__str__(),
      'desc':self.desc,
    }
    return dic

  class Meta:
    db_table = "goods_type"
    verbose_name = "商品类型"
    verbose_name_plural = verbose_name

# 2.商品 – Goods
    # 1.	title – 商品名称
    # 2.	price – 商品价格
    # 3.	spec – 商品的规格(1盒/500g)
    # 4.	picture - 商品图片
    # 5.	goodsType – 商品类型
    # 6.	isActive – 是否上架,默认为True

class Goods(models.Model):
  title = models.CharField(
    max_length=40,
    verbose_name='商品名称'
  )
  # max_digits:表示的所有数字的位数
  price = models.DecimalField(
    max_digits=7,
    decimal_places=2,
    verbose_name='商品价格'
  )
  spec = models.CharField(
    max_length=20,
    verbose_name='商品规格'
  )
  picture = models.ImageField(
    upload_to='static/upload/goods',
    null=True,
    verbose_name='商品图片'
  )
  goodsType = models.ForeignKey(
    GoodsType,
    verbose_name='商品类型'
  )
  isActive = models.BooleanField(
    default = True,
    verbose_name='是否上架'
  )

  def __str__(self):
    return self.title

  class Meta:
    db_table = 'goods'
    verbose_name = '商品'
    verbose_name_plural = verbose_name

GoodType是商品类型(一),Goods是商品(多)
1.正常查询
通过“多的表”查询“一的表”
good = Goods.objects.get(id=1)
goodsType = good.goodsType
2.反向查询
通过一查多
goodstype = GoodsType.objects.get(id=1)
goods = goodstype.goods_set.all()

3.将查询对象转化为json字符串的方式有

1.可以转化为json对象的有列表、字典、集合等,
	如果是这些可以直接转化为json字符串。
	json_data = json.dumps(json_list)
2.利用django的model_to_dict将queryset序列化成字典
	json_dict = model_to_dict(good)
3.利用Django的serialize序列化成json对象
import json
from django.core.serializers import serialize

json_data = serialize('json',goods) #str
json_data = json.loads(json_datas) #序列化成json对象

注意:
第一种、第二种方式不能序列化时间类型和图片类型,第三种方式可以。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值