关系字段 (一对一)增删改查

一对一的关联关系多用在当一张表的不同字段查询频次差距过大的情况下,将本可以存储在一张表的字段拆开放置在两张表中,然后将两张表建立一对一的关联关系。
字段:OneToOneField
字段参数
to:设置要关联的表。
to_field:设置要关联的字段。
on_delete: 同ForeignKey字段。

class IdCard(models.Model):
    num = models.CharField(max_length=32,unique=True)
    address = models.CharField(max_length=32)
    def __str__(self):
        return 'num : {}'.format(self.num)

class User(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    idcard = models.OneToOneField(to='IdCard',on_delete=models.CASCADE,to_field='num')
    def __str__(self):
        return 'name : {}'.format(self.name)

增加

#增
    #常规方法
    
    #save()
    id_card = models.IdCard()
    id_card.num = '119'
    id_card.address = '火警'
    id_card.save()
    
    #create()
    models.User.objects.create(
        name = '王五',
        age = 12,
        idcard=id_card
    )

修改

# 正向
    user = models.User.objects.get(name='王五')
    user.idcard.address = '消防局'
    user.idcard.save()
# 反向
    idcard = models.IdCard.objects.get(num='120')
    idcard.user.name = '赵四'
    idcard.user.save()
    return HttpResponse('sssssss')

查找

#正向查找
    user = models.User.objects.get(name='赵四')
    print(user.idcard) #num : 120
    print(user.idcard.address)#医院
#反向查找
    idcard = models.IdCard.objects.get(num='120')
    print(idcard.user)#name : 赵四
    print(idcard.user.name)#赵四

删除

#delete()方法(两个表格中的记录都需要手动删除)
    models.User.objects.get(name='王五').delete()
    models.IdCard.objects.get(num='119').delete()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值