一对一:
一对一的关系极为一个数据仅对应一个数据,用下图的结构图可以帮助理解:
下面用代码实现一下,首先要创建工程项目如下:
接着,我们定义模型:
来到models.py
文件,创建两个模型:
from django.db import models# Create your models here.class One(models.Model): oname = models.CharField(max_length=20,null=True) oage = models.CharField(max_length=20,null=True) odate = models.DateField(null=True)class Two(models.Model):# 设置一对一关系,是通过将表中的字段设置为主键完成的# on_delete=models.CASCADE 当父表中的某一条数据删除的时候 # 相关字表中的数据也会被删除 tsub = models.OneToOneField(One,on_delete=models.CASCADE,primary_key=True) tfond = models.CharField(max_length=20,null=True) tdes = models.CharField(max_length=200,null=True)
来到myPro
文件夹下添加以下两句代码:
import pymysqlpymysql.install_as_MySQLdb()
下面可以迁移文件:
python manage.py makemigrationspython manage.py migrate
这样我们就创建了两个表:
来到views.py
文件中添加数据,代码如下:
from django.shortcuts import renderfrom .models import One,Two# Create your views here.def index(request): o1 = One.objects.create(oname='张三',oage=11,odate='2011-11-11') o2 = One.objects.create(oname='张三2',oage=12,odate='2012-12-12') t1 = Two.objects.create(tsub=o1,tfond='o1',tdes='我喜欢o1') t2 = Two.objects.create(tsub=o2,tfond='o2',tdes='我喜欢o2') return render(request,'index.html')
运行之后,将添加数据的代码注释掉,否则后面每运行一次都会添加。
下面,我们通过查询数据来甄别其中的关系。
def select(request): t1 = Two.objects.get(tsub__oname = '张三') return render(request,'index.html',{'t1':t1})
一对多
即一个对象对应着对个对象。
创建模型代码:
from django.db import models# Create your models here.class People(models.Model): name = models.CharField(max_length=50) card_num = models.IntegerField(default=0)class Card(models.Model): number = models.CharField(max_length=20) person = models.ForeignKey(People,on_delete=models.CASCADE) source = models.CharField(max_length=50)
urls.py
路由设置:
from django.contrib import adminfrom django.urls import pathfrom myApp import viewsurlpatterns = [ path('admin/', admin.site.urls), path('add/',views.add), path('select/',views.select),]
新闻热点
疑难解答