day18-DjangoORM外键操作

一、前言

  之前我们都是单表操作的,今天我们来研究一下,django的orm的外键操作,也就是一对多的约束。这个想必都熟悉了吧。就是说一个人对应一个部门,但是一个部门对应多个人。

二、设置外键的语法

2.1、语法

外键名 = models.ForeignKey("类名",to_field="关联字段",default=默认值,on_delete=models.CASCADE,)  #关联字段必须是唯一的,这个to_field不加也可以,默认用的就是主键

三、外键操作

3.1、创建外键关系

说明:创建UserInfo和UserGroup关系,通过在UserInfo表中创建外键,建立两个表一对多的关系

class UserGroup(models.Model):
    uid = models.AutoField(primary_key=True)
    groupname = models.CharField(max_length=32)
    ctime = models.DateTimeField(auto_now_add=True,null=True)
    utime = models.DateTimeField(auto_now=True,null=True)

class UserInfo(models.Model):
    username = models.CharField(max_length=32,help_text="用户名")
    password = models.CharField(max_length=60)
   #创建UserGroup的外键关系,字段参数on_delete=models.CASCADE,是django2.0加进来的
    user_group = models.ForeignKey("UserGroup",to_field="uid",default=1,on_delete=models.CASCADE,)

    user_type_choices = (
        (1,"超级用户"),
        (2,"普通用户"),
        (3,"访客"),
    )
    user_type_id = models.IntegerField(choices=user_type_choices,default=1)

UserInfo的表结构生成如图:

在数据库中django自动帮你生成了user_group_id这个字段,而且数字类型是 数字类型。

3.2、生成表结构关系

3.3、UserInfo生成的产物

说明:之前我们看到数据库里面生成了user_group_id,但是不止只有这个,还有user_group,这个user_group代指的是UserGroup这个数据表类的对象。

使用user_group对象的场景:

def user_info(request):
    from app01 import models
    if request.method == "GET":
        user_list = models.UserInfo.objects.all()
        for row in user_list:
            print(row.id)
            print(row.user_group.uid)
            print(row.user_group.groupname)
        return  render(request,'user_info.html',{'user_list':user_list})

如图:

显示在前端:

 

四、总结

  1. 创建外键语法:外键名 = models.ForeignKey("类名",to_field="关联字段",default=默认值,on_delete=models.CASCADE,)
  2. 外键名在数据库生成:外键名_id,且外键名是关联类的一个对象,这个对象包括类里面的所有属性。
posted @ 2018-03-13 13:36  帅丶高高  阅读(244)  评论(0)    收藏  举报