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),
]

 

posted @ 2024-07-09 22:31  little小新  阅读(15)  评论(0编辑  收藏  举报