一对一:
一对一的关系极为一个数据仅对应一个数据,用下图的结构图可以帮助理解:
下面用代码实现一下,首先要创建工程项目如下:
接着,我们定义模型:
来到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 pymysql
pymysql.install_as_MySQLdb()
下面可以迁移文件:
python manage.py makemigrations
python manage.py migrate
这样我们就创建了两个表:
来到views.py文件中添加数据,代码如下:
from django.shortcuts import render
from .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 admin
from django.urls import path
from myApp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('add/',views.add),
path('select/',views.select),
]