16、 Django-多表操作-多个模块的关联-一对一的增删改查- models.onetoone()
一对一不是数据库的一个连表操作、而是Django独有的一个连表操作、一对一相当于是特殊的一对多的关系、只是相当于加了unique=True
models.py
from django.db import models
#身份证
class IDCard(models.Model):
idcard_num = models.CharField(max_length=18, unique=True)
address = models.CharField(max_length=200)
#用户
class User(models.Model):
name = models.CharField(max_length=30, unique=True)
age = models.IntegerField(default=18)
sex = models.BooleanField(default=True)
#一对一的关系、相当于一对多的关系、在多的一方添加少的一方的对象
#这里多的一方指的是:对象多的一方、如一个身份证类可以对多个用户类的信息
idcard = models.OneToOneField(IDCard, on_delete=models.PROTECT)
#数据迁移
#生成两个表、在表User中多一个idcard_id 这个字段就是IDCard 表中的id主键的数据
views.py
from django.shortcuts import render, HttpResponse
from App_OnetoOne.models import *
#一对一的增删改查和一对多的一样
#查询
def get(request):
#查找某个用户的身份证信息
users = User.objects.get(pk=1)
print(users.idcard) #拿到idcard的对象
print(users.name) #拿到对象信息姓名
#这里的idcard是models中定义的IDCard的对象
print(users.idcard.idcard_num) #拿到用户的身份证号
print(users.idcard.address) #拿到用户的地址
#查找身份证对应的用户
idcards = IDCard.objects.get(pk=1)
print(idcards.user) #这是获取用户信息的对象、和上面的idcard一样
print(idcards.user.name, idcards.user.age, idcards.user.sex) #反过来通过身份证去查找用户
return HttpResponse('查询成功')
urls.py
from django.contrib import admin
from django.urls import path
#一对一
from App_OnetoOne import views as onetoone_view
urlpatterns = [
#一对一
path('onetoone/getuser/', onetoone_view.get),
path('admin/', admin.site.urls),
]