美文网首页
Django数据模型--表关系(一对多)

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

作者: 枫珍俊少 | 来源:发表于2018-09-17 22:14 被阅读0次

一、一对一关系

使用方法: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)

注意:外键定义在多方
参数:(参考文章:https://blog.csdn.net/u013210620/article/details/79182870

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()

相关文章

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

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

  • Django 模型间的关系

    Django模型之间的关系 Django模型的对应关系,一对一,一对多,以及多对多的关系。 一对一 OneToOn...

  • @OneToMany注解的使用

    假设有两个表,订单表和产品表,订单跟产品的关系是一对多的关系,那么在JPA中怎样表示一对多的关系呢?实体关系一对多...

  • 八:关联关系

    表的关系:MySQL相互关联的表之间存在一对一,一对多(多对一),多对多的关系 1.一对一的关系:表1中的一条数据...

  • Django中关系查询

    1 Django中关系查询 一对一 一对多 多对多 1.1 一对多 1.1.1 app下创建models类 1.1...

  • Django模型(三)

    知识要点: 表关系的实现 一对多表关系 在Mysql中一对多是通过外键实现的,在django模型中通过Foreig...

  • MySQL数据库中的理论知识:表关系 和 范式

    MySQL表关系:一对一, 一对多, 多对多 关系 将实体与实体的关系,反应到最终数据库表的设计上,将关系分为三...

  • python编写数据库表关系

    表关系(一对一,一对多,多对多) 查看数据库中已完成的表

  • 数据库表与表之间的关系

    1、数据库中表与表之间的关系 表与表之间一般存在三种关系,即一对一,一对多,多对多关系。 (1)一对一 (2)一对...

  • 3.5 SQLAlchemy的表关系

    SQLAlchemy的ORM(4) 表关系: 表之间的关系存在三种:一对一、一对多、多对多。而SQLAlchemy...

网友评论

      本文标题:Django数据模型--表关系(一对多)

      本文链接:https://www.haomeiwen.com/subject/lwmdnftx.html