Django数据模型--表关系(一对多)

一、一对一关系

使用方法:models.ForeignKey(要关联的模型)
举例说明:年级、教师和学生

from django.db import models
class Grade(models.Model):
    name = models.CharField(max_length=)
class Student(models.Model):
    name = models.CharField(max_length=)
    grade = models.ForeignKey(Grade)

注意:外键定义在多方
参数:

ForeignKey(ForeignObject) # ForeignObject(RelatedField)
    to,                         # 要进行关联的表名
    to_field=None,              # 要关联的表中的字段名称
    on_delete=None,             # 当删除关联表中的数据时,当前表与其关联的行的行为
        - models.CASCADE,删除关联数据,与之关联也删除
        - models.DO_NOTHING,删除关联数据,引发错误IntegrityError
        - models.PROTECT,删除关联数据,引发错误ProtectedError
        - models.SET_NULL,删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
        - models.SET_DEFAULT,删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
        - models.SET,删除关联数据,
              a. 与之关联的值设置为指定值,设置:models.SET(值)
              b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
                 def func():
                     return 10
                 class MyModel(models.Model):
                     user = models.ForeignKey(
                         to="User",
                         to_field="id"
                         on_delete=models.SET(func),)
    related_name=None,          # 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all()
    related_query_name=None,    # 反向操作时,使用的连接前缀,用于替换【表名】     如: models.UserGroup.objects.filter(表名__字段名=1).values(‘表名__字段名‘)
    limit_choices_to=None,      # 在Admin或ModelForm中显示关联数据时,提供的条件:
        # 如:
        - limit_choices_to={‘nid__gt‘: 5}
        - limit_choices_to=lambda : {‘nid__gt‘: 5}

        from django.db.models import Q
        - limit_choices_to=Q(nid__gt=10)
        - limit_choices_to=Q(nid=8) | Q(nid__gt=10)
        - limit_choices_to=lambda : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption=‘root‘)
    db_constraint=True          # 是否在数据库中创建外键约束
    parent_link=False           # 在Admin中是否显示关联数据

调用方式:

student = Student()
grade = student.grade

grade = Grade()
students = grade.student_set.all()

原文地址:https://www.cnblogs.com/wangjunget/p/9665334.html

时间: 2024-08-30 09:19:26

Django数据模型--表关系(一对多)的相关文章

多表关系一对多和多对多

多表关系一对多和多对多 一.一对多 创建数据 一对多:外键必须放在多的一方,此时外键值不唯一 # 出版社(publish): id,name,address,phone create table publish( id int primary key auto_increment, name varchar(64), address varchar(256), phone char(20) ); # 书(book):id,name,price,publish_id, author_id crea

57.表关系一对多使用详解

1.应用场景:比如一个文章的分类中可以含有多篇文章 ,但是一篇文章只能属于一个分类,这就是典型的一对多关系. 2.实现方式 :一对多或者是多对一,都是通过"ForeignKey"来实现的,在这里以文章和分类的案例进行讲解. articleAPP中models.py中定义模型,示例代码如下: from django.db import models class Article(models.Model): title = models.CharField(max_length=100)

django之表关系的实现

1.三种表关系在Model类中的对应关系 2.以学生表.学生具体信息表.学院表.课程表为例实现上述三种表关系 分析:一个学院有多个学生,因此学院与学生的关系为一对多的关系    一个学生上多门课,一门课程有多个学生上,因此学生与课程的关系为多对多的关系    一个学生有一个具体信息表,一个具体信息表对应一个学生,因此学生与学生具体信息表为一对一的关系 3.代码实现 from django.db import models # Create your models here. class Depa

Django 第十课 3.【ORM表关系】

#表关系 ## 一对多: 1:应用场景:比如文章和作者之间的关系.一个文章只能由一个作者编写,但是一个作者可以写多篇文章.文章和作者之间的关系就是典型的多对一的关系. 2:实现方式:一对多或者多对一,都是通过 'ForeignKey' 来实现的.还是以文章和作者的案例进行讲解. class User(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=10

PowerDesinger:实体关系图->物理数据模型(关系表)->sql语句-数据库

之前参加项目的时候,就听说过PowerDesinger,但一直都没有用到过,这次通过接手基础的选课模块终于有机会通过powerDesinger的CDM模型创建数据库了. PowerDesinger中存在几种数据模型分别是:M----Model, 概念数据模型(CDM)Conceptual Diagram Model 逻辑数据模型(LDM) 物理数据模型(PDM)Physical Diagram Model 面向对象模型(OOM) 业务流程模型(BPM) 抽象程度(依次降低): CDM->LDM-

Django博客项目之表关系设计

一.需要创建的表以及表之间的关系 1.User(用户信息表) User表和Blog表是一对一关系,即一个用户对应一个个人站点 2.Blog(个人站点表) 3.Category(文章分类表) Blog和Category表是一对多关系,即一个站点可以有多个分类,但是一个分类只属于一个站点 4.Tag(文章标签表) Blog和Tag表是一对多关系,即一个站点可以有多个标签,但是一个标签只属于一个站点 5.Article(文章表) User和Article表是一对多关系,即一个用户可以有多篇文章,但是一

Django表关系的实现

1.首先创建以下5张表模型,表之间的以应关系如下: 2.模型类: #学院表 class Department(models.Model): d_id = models.AutoField(primary_key=True) d_name = models.CharField(max_length=30) def __str__(self): return 'Department<d_id=%s,d_name=%s>' %(self.d_id,self.d_name) #学生表 class St

5.Django|模型层--多表关系

多表操作 一对多Book id title price publish email addr 1 php 100 人民出版社 111 北京 2 python 120 沙河出版社 222 沙河 3 go 110 人民出版社 119 北京 4 java 300 人民出版社 111 北京 Book多 id title price publish_id 1 php 100 1 2 python 120 1 3 go 110 2 4 java 300 1 Publish一 id name email ad

四、Django学习之关系表介绍及使用

关系表介绍及使用 一对一关系 xx = models.OneToOneField(to='表名',to_field='字段名',on_delete=models.CASCADE) #on_delete:删除时的一些级联效果,to_field可以不写,默认是关联到另一张表的主键,on_delete在1.x版本的django中不用写,默认是级联删除的,2.x版本的django要写. 增加数据 方式1 new_author_detail = models.AuthorDetail.objects.cr