django-表关系之一对一

实现一对一的的关系

在models.py中,创建两个ORM模型

from django.db import models

class FrontUser(models.Model):
    username = models.CharField(max_length=200)

class UserExtension(models.Model):
    school = models.CharField(max_length=100)
    user = models.OneToOneField('FrontUser',on_delete=models.CASCADE)   #OneToOneField 是一对一

接着使用以下两条命令映射到数据库即可

python manage.py makemigrations

python manage.py migrate

 

然后再views.py中

from django.http import HttpResponse
from frontuser.models import FrontUser,UserExtension

def one_to_one_view(request):
    user = FrontUser.objects.first()    #获取该表下的第一条数据

    extension = UserExtension(school='zhangs')  #往该表插入数据
    extension.user = user       #绑定这个关系
    extension.save()            #保存这个数据在数据库

    return HttpResponse('success')


#然后在urls.py中映射即可

 

基本的查询数据:

def one_to_one_view(request):
    #   关联一对一关系
    # user = FrontUser.objects.first()    #获取该表下的第一条数据
    # 
    # extension = UserExtension(school='zhangs')  #往该表插入数据
    # extension.user = user       #绑定这个关系
    # extension.save()            #保存这个数据在数据库 
    
    #查询数据
    extension = UserExtension.objects.first()
    print(extension.user)

    return HttpResponse('success')

 

查询该表下的扩展信息(也就是关联的那个表的信息):

和一对多的关系类似

def one_to_one_view(request):
    #查询扩展信息
    user = FrontUser.objects.first()
    print(user.userextension.school)    #django会自动为你创建这个查询方法,名称也就是你关联那张表的小写形式,后面在.上你想要查的外键字段名称即可

    return HttpResponse('success')

 

更改查询扩展信息的名称(默认方法是关联那张表的小写名称):

在关联那张表中增加一个参数,起一个自定义名称即可

也就是在models.py中  related_name='extension'

class UserExtension(models.Model):
    school = models.CharField(max_length=100)
    user = models.OneToOneField('FrontUser',on_delete=models.CASCADE,related_name='extension')   #OneToOneField 是一对一

接着在views.py中使用这个名称即可

def one_to_one_view(request):
    #查询扩展信息
    user = FrontUser.objects.first()
    print(user.extension.school)    #方法改为了自定义的extension

    return HttpResponse('success')

 

posted @ 2019-11-19 22:25  啃料丶  阅读(449)  评论(0编辑  收藏  举报