• django和flask中的一对一、一对多、多对多关系的模型类设计


    一、Django:

    一对一:

    在任意一张表中定义一个字段,models.OneToOneField定义:

    # 比如用户与身份证表:一个用户只能有一张身份证,一张身份证只能属于一个用户
    class User(models.Model):
        user = models.CharField(max_length=10)
       .....
    class IdCard(models.Model): card_num = models.CharField(max_length=20)
       .... user
    = models.OneToOneField(User,on_delete=models.CASCADE)

    一对多:

    在多的类中定义一个字段,models.ForeignKey定义:

    # 比如用户与订单表:一个用户可以下很多订单,一笔订单只能属于一个客户
    
    class User(models.Model):
        user = models.CharField(max_length=10)
        ......
    
    class Order(models.Model):
        pay_method = models.SmallIntegerField(choices=PAY_METHOD_CHOICES, default=3, verbose_name='支付方式')
        ......
        user = models.ForeignKey(User, verbose_name='用户', on_delete=models.CASCADE)

    多对多:

    建立一个新表,分别写两个表的外键,models.ForeignKey定义:

    # 比如用户与权限表:一个用户可以有多个权限,一个权限可以归多个用户所有
    
    class User(models.Model):
        user = models.CharField(max_length=10)
        ......
    
    class Acction(models.Model):
        caption = models.CharField(max_length=10)
        ......
    
    class UserToAcction(models.Model):
        u = models.ForeignKey(User,on_delete=models.CASCADE)
        a = models.ForeignKey(Acction,on_delete=models.CASCADE)

    二、Flask(别忘了需要设置id字段)

    一对一:

    在任意一张表中用db.relationship定义(参数加上uselist=False),另一张表中用db.ForeignKey定义

    # 比如用户与身份证表
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        user = db.Column(db.String(10))
        card = card= db.relationship('IdCard',uselist=False,backref=‘user’)
        ......
    
    class IdCard(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        card_num = db.Column(db.String(200))
        .....
        user_id = db.Column(db.Integer,db.ForeignKey('user.id'))  # user是User类对应的数据库表名

    一对多:

    在一类中用db.relationship定义,多类中用db.ForeignKey定义

    # 比如用户与订单表:一个用户可以下很多订单,一笔订单只能属于一个客户
    
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        user = db.Column(db.String(10))
        order = db.relationship('Order', backref='area')
        ......
    
    class Order(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        status = db.Column(choices=db.Enum(
                'WAIT_ACCEPT',  # 待接单
                'WAIT_PAYMENT',  # 待支付
                'PAID',  # 已支付
                'WAIT_COMMENT',  #待评价
                'COMPLETE',  # 已完成
                'CANCELED',  #已取消
                'REJECTED'  # 已拒单
            ),
            default='WAIT_ACCEPT',index=True)
        ......
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # user是User类对应数据库的表名

    多对多,如下:

    # 比如用户与权限表:一个用户可以有多个权限,一个权限可以归多个用户所有
    
    class User(db.Model):
    
        __tablename__ = 'user'
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(32), unique=True, nullable=False)
        actions = db.relationship('Acction', secondary=user_acction)
        ......
    
    class Acction(db.Model):
    
        __tablename__ = 'action'
    
        id = db.Column(db.Integer, primary_key=True)
        caption = de.Column(db.String(10))
        ......
    
    
    user_acction = db.Table(
        "user_acction",  # 新表的表名
        db.Column("user_id", db.Integer, db.ForeignKey("user.id"), primary_key=True),
        db.Column("acction_id", db.Integer, db.ForeignKey("acction.id"), primary_key=True)
    )
  • 相关阅读:
    jQuery UI (7)Autocomplete 自动补全插件
    jQuery UI (6)Accodion 可折叠面板插件
    jQuery UI (5)Sortable 排序插件
    jQuery UI (4)Jquery UI Selectable 选择插件
    jQuery UI (3)Resiable 调整大小插件
    jQuery UI (2)Droppable 放置插件
    jQuery UI (1)Draggable 拖动插件
    C#(99):Lambda表达式
    C#(99):四种Timer的区别和用法
    C#(99):Reporting Service编程----访问Web服务
  • 原文地址:https://www.cnblogs.com/zzmx0/p/13499309.html
Copyright © 2020-2023  润新知