表之间数据的一对一关系: 一个账户对应一个联系人, 反过来一个联系人对应一个账户
一: 建立一个app, 在models.py文件中, 创建相关的表
class Account(models.Model): aname = models.CharField(max_length=20) apwd = models.CharField(max_length=16) adate = models.DateTimeField(auto_now_add=True) class Meta: db_table = 'account' def __str__(self): return '{}'.format(self.aname) class Concat(models.Model): # 一个联系人要对应一个账户 # OneToOneField() 一对一 # 1.对应的数据模型类 on_delete 当主表中的数据被删除时,从表中的数据如何处理 # on_delete=models.CASCADE 当主表中的数据删除时,从表数据也一并删除 account = models.OneToOneField(Account,on_delete=models.CASCADE) # 当前表中的字段 address = models.CharField(max_length=255) phone = models.CharField(max_length=11) class Meta: db_table = 'concat' def __str__(self): # self.account.aname 就是Account模型类对象的aname属性值 return 'Concat:{}'.format(self.account.aname)
关键字: OneToOneField
二: 在views.py文件中, 对表进行操作
from django.shortcuts import render,HttpResponse from .models import Account,Concat # Create your views here. def add(request): # 先创建主表中的数据 account = Account(aname='校长',apwd='123456',adate='2018-04-27') account.save() # account = Account.objects.get(id=4) # 将account和一个concat进行一对一的绑定 # account参数必须是Account中的一条数据 concat = Concat(account=account,address='zzz',phone='110') concat.save() return HttpResponse('成功') def select(request): # 1.通过从表查询主表中对应的数据 concat = Concat.objects.get(id=3) # concat.account 这就是主表中的数据模型对象 print(concat.account.aname,concat.account.apwd,concat.account.adate) # 2.通过主表中字段查询从表中的数据 # 从表中的一对一字段名__主表字段__条件 # account__aname__contains = concat = Concat.objects.get(account__aname__contains='小明') print(concat.address) print(concat.phone) print(concat.account.aname) print(concat.account.adate) return HttpResponse('成功......') def delete(request): # 1.删除从表数据,不会对主表造成影响 # Concat.objects.get(id=2).delete() # 2.删除主表数据 Account.objects.get(id=3).delete()