• Django中的Model(表结构)


    Model(表设计)

    在这里只提经常用到的三种联表结构:

    • 一对多:models.ForeignKey(其他表)
    • 多对多:models.ManyToManyField(其他表)
    • 一对一:models.OneToOneField(其他表)

    一、联表结构一对多

    一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
    例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。

     

    先来看django  models里面是怎么写的:

     1 class Color(models.Model):
     2 
     3     name = models.CharField(max_length=15)
     4 
     5 
     6 class Someting(models.Model):
     7 
     8     c1 = models.CharField(max_length=15)
     9     c2 = models.CharField(max_length=15)
    10     c3 = models.CharField(max_length=15)
    11     c4 = models.CharField(max_length=15)
    12     color = models.ForeignKey(Color)        #设置外键为另一个类名
    13 
    14 
    15 class Host(models.Model):
    16     hostname = models.CharField(max_length=15)
    17     business = models.ForeignKey('Business')    #用引号的方式是避免外键的类在下面而导致的报错
    18 
    19 
    20 class Business(models.Model):
    21     name = models.CharField(max_length=15)

    在数据库中的两张表,可以看到设置外键的那列关联到了另一张表上的id列:

    color表

    something表:

    同样也可以有选择性的关联另一张表中的数据:

    参数:to_field=“”

     1 class Shoplist(models.Model):
     2 
     3     name = models.CharField(max_length=15, null=True, unique=True)   #必须要设置unique = True,(不能重复)
     4     price = models.CharField(max_length=15)
     5 
     6 
     7 class Shop(models.Model):
     8 
     9     v1 = models.CharField(max_length=15)
    10     v2 = models.CharField(max_length=15)
    11     pr = models.ForeignKey(Shoplist, to_field='name')    

    二、联表结构多对多

    一张图诠释了多对多的含义:

    在django中的models里:

     1 class Group(models.Model):
     2 
     3     groupname = models.CharField(max_length=15)
     4 
     5 
     6 class User(models.Model):
     7 
     8     name = models.CharField(max_length=15)
     9     email = models.CharField(max_length=15)
    10     phone = models.CharField(max_length=15)
    11     group = models.ManyToManyField(Group)    #与表Group创建多对多的关联

    在这里我们不需要专门创建第三张关联的表,django自动就为我们创建了第三张表:

    三、联表结构一对一

    django中的一对一表结构可以理解为在多对多的基础上建立的,只不过绑定的表对象里的数据只能出现一次:

    由上图理解,表A与表B建立了一对一的结构。(B建立了与A的一对一),那么表A中的数据在表B中只能出现一次。

    在django的model里:

     1 class User2(models.Model):
     2 
     3     name = models.CharField(max_length=15)
     4     email = models.CharField(max_length=15)
     5     phone = models.CharField(max_length=15)
     6 
     7 
     8 class Group2(models.Model):
     9 
    10     groupname = models.CharField(max_length=15)
    11     group = models.OneToOneField(User2)
  • 相关阅读:
    printf输出函数
    死循环的3种编写方案
    volatile 和const 变量的使用
    arm mov 指令
    arm ldr 指令
    arm str 指令
    Ztree-
    端口占用问题:java.net.BindException: Address already in use: bind
    模块和包
    序列化模块:json、pickle、shelve
  • 原文地址:https://www.cnblogs.com/chenchao1990/p/5309890.html
Copyright © 2020-2023  润新知