码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-17 23:05:07      阅读:391      评论:0      收藏:0      [点我收藏+]

标签:aaaaaa   --   foreign   int   ade   ice   调用   拖拽   none   

一、一对一关系

使用方法: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()
技术分享图片
 

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

标签:aaaaaa   --   foreign   int   ade   ice   调用   拖拽   none   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!