Django 一对一,一对多,多对多 操作、常用方法

几对几的模型结构的使用场景为:一般根据业务需求,同一业务,需要向相关联的多表插入删除数据时,会用到。

一对一:

创建一个用户表

class Users(models.Model):

  username = models.CharField(max_length=20,null=true,blank=true)

  class Meta:

    db_table='users'

创建一个用户详情表

  #在用户详情表中,关联用户表,让两个表的数据产生联系

  #第一个参数,是被关联的模型名称

  #第二个参数:当user用户表中的一条数据被删除时候,与之对应的详情表数据也会被删除

class UserInfo(models.Model):

  uid = models.OneToOneField(Users,on_delete=models.CASCADE)

  address = models.CharField(max_length=100,null=True)

  class Meta:

    db_table='userinfo'

生成迁移文件 :python3 manage.py makemigrations

执行迁移文件:python3 manage.py migrate

此时一对一的表创建完成,下面进行操作:

添加数据:向user表中添加一条,同时也会向userinfo相对应的添加一条数据

  data = {'name':'ss','age':23}
  ob = models.User(**data)
  ob.save()
  obl = models.UserInfo()
  obl.address='ts'
  obl.uid=ob
  obl.save()
  return HttpResponse('一对一')

查询数据:

查询user表数据:

ob = models.User.objects.get(id=11)

根据从表的外键查询主表的数据:
    1、先找到从表的该条数据

      ui = models.User.objects.first()

    2、根据从表的外键拿到主表的信息,格式:  ui.从表外键.主表想得到的信息

      print(ui.uid.name)  #取到对应的主表信息

根据主表的主键查询从表的数据:

    1、先找到主表的该条数据

    u = models.User.objects.first()

    2、根据主表对象拿到从表的信息 ,格式: u.从表.从表想得到的信息

    print(u.UserInfo.address)

猜你喜欢

转载自www.cnblogs.com/ziyun20160613/p/9950133.html