Django的数据库中表的一对一关系

表之间数据的一对一关系: 一个账户对应一个联系人, 反过来一个联系人对应一个账户

一: 建立一个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()



















 
 

猜你喜欢

转载自blog.csdn.net/qq_41664526/article/details/80159080