129.(后端)商品model添加——flask中建立多对多数据表模型

1.概述

由于当我们添加商品时,一个商品可能会存在多个图片,多个参数。遇到这样的情况,我们之前的数据表模型,只是建立了一个固定字段,只能存在一个图片,一个参数,这样就很不友好。这里,我们应该新建两张表,去做到多对多之间的关系。

2.建立多对多关系模型代码展示


# 商品分类
class Category(db.Model):
    __tablename__ = 't_category'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), nullable=False)
    level = db.Column(db.Integer)
    # 外键的添加
    pid = db.Column(db.Integer, db.ForeignKey('t_category.id'))
    # 自关联的创建
    children = db.relationship('Category')

    attrs = db.relationship('Attribute', backref='category')

    def to_dict(self):
        return {
            'id': self.id,
            'name': self.name,
            'level': self.level,
            'pid': self.pid
        }
    
# 商品的参数
class Attribute(db.Model):
    __tablename__ = 't_attribute'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    val = db.Column(db.String(255))
    cid = db.Column(db.Integer, db.ForeignKey('t_category.id')) # 外键关联商品分类表
    _type = db.Column(db.Enum('static', 'dynamic')) # 枚举规定值

    # 返回值
    def to_dict(self):
        return {
            'id': self.id,
            'name': self.name,
            'val': self.val,
            'cid': self.cid,
            'type': self._type
        }

# 商品
class Goods(db.Model):
    __tablename__ = 't_goods'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(512)) # 商品名称
    price = db.Column(db.Float)
    number = db.Column(db.Integer) # 商品库存
    introduce = db.Column(db.Text) # 商品介绍
    big_log = db.Column(db.String(256)) # 商品大照片
    small_log = db.Column(db.String(256)) # 商品小照片
    state = db.Column(db.Integer) # 0未通过 1审核中 2已审核
    is_promote = db.Column(db.Integer) # 是否促销
    hot_number = db.Column(db.Integer) # 促销数量
    weight = db.Column(db.Integer) # 权重比例:用于促销
    cid_one = db.Column(db.Integer, db.ForeignKey('t_category.id'))
    cid_two = db.Column(db.Integer, db.ForeignKey('t_category.id'))
    cid_three = db.Column(db.Integer, db.ForeignKey('t_category.id')) # 属于哪个商品分类,有三级菜单

    # 外键的方式与Category表建立关系
    category = db.relationship('Category', foreign_keys=[cid_three])

    def to_dict(self):
        return {
            'id': self.id,
            'name': self.name,
            'price': self.price,
            'number': self.number,
            'introduce': self.introduce,
            'big_log': self.big_log,
            'small_log': self.small_log,
            'state': self.state,
            'is_promote': self.is_promote,
            'hot_number': self.hot_number,
            'weight': self.weight,
            'cid_one': self.cid_one,
            'cid_two': self.cid_two,
            'cid_three': self.cid_three,
            'attrs': [a.to_dict() for a in self.category.attrs]

        }

# 由于一个商品有多张图片需要存放,需要单独去创建一个数据表去保存
class Picture(db.Model):
    __tablename__ = 't_picture'
    id = db.Column(db.Integer, primary_key=True)
    path = db.Column(db.String(512))
    gid = db.Column(db.Integer, db.ForeignKey('t_goods.id'))

# 由于一个商品有多个属性需要存放,需要单独去创建一个数据表去保存
# 和商品、商品的参数表进行关联
class GoodsAttr(db.Model):
    __tablename__ = 't_goods_attr'
    gid = db.Column(db.Integer, db.ForeignKey('t_goods.id'), primary_key=True)
    aid = db.Column(db.Integer, db.ForeignKey('t_attribute.id'), primary_key=True)
    val = db.Column(db.String(512))
    _type = db.Column(db.String(8))


在使用migrate进行数据迁移,upgrade进行保存数据,如果需要具体展示,可以查看此专栏之前的建立模型的文章

3.Navicat效果展示

shujv

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值