首先我们编辑 models.py,添加 Colors 和 Balls 两个对象:
from django.db import models
# 母表
class Colors(models.Model):
colors = models.CharField(max_length=10)
def __str__(self):
return self.colors
# 一对一关系,每一个球都只有一种颜色,每种颜色的球只有一个
class Ball(models.Model):
# 球的颜色与 Color 母表的颜色一一对应
ball_color = models.OneToOneField('Colors')
# 描述
description = models.CharField(max_length=10)
def __str__(self):
return self.description
在后台添加颜色 red,对应的球的描述为“1号球”。
查询数据
子表查询母表:
from myApp.models import Colors, Ball
# 查询“1号球”对应的颜色
# 获取一个子表对象
>>> b = Ball.objects.get(description="1号球")
<Ball: 1号球>
# 获取对应的母表对象
>>> b.ball_color
<Colors: red>
# 查询该对象的 color 属性
>>> b.ball_color.colors
'red'
另一种方法:
# 获取“1号球”的 Colors 对象
>>> c = Colors.objects.get(ball__description="1号球")
<Colors: red>
>>> c.colors
'red'
母表查询子表:
# 查询红色球对应的描述
# 获取某 Colors 对象
>>> c = Colors.objects.get(colors="red")
<Colors: red>
# 获取对应的 Ball 对象
# 这里默认用子表名称的小写,如果设定了 related_name 则使用 related_name
>>> c.ball
<Ball: 1号球>
>>> c.ball.description
'1号球
另一种方法:
# 获取颜色为红的 Ball 对象
>>> b = Ball.objects.get(ball_color__colors="red")
<Ball: 1号球>
>>> b.description
'1号球'
添删数据
添加:
# 创建一个新的 Colors 对象
c = Colors.objects.create(colors="blue")
# 创建一个新 Ball 对象
Ball.objects.create(ball_color=c,description="2号球")
删除:
# 删除某个 Ball 对象
Ball.objects.get(description="2号球").delete()
# 删除某个 Colors 对象
Colors.objects.get(colors="blue").delete()
# 清空一张表
Colors.objects.all().delete()
修改数据
修改颜色
c = Colors.objects.get(colors="red")
c.colors = 'yellow'
c.save()
修改球
# save() 方法
c = Colors.objects.create(colors="green")
b = Ball.objects.get(description="1号球")
b.color = c
b.description = "3号球"
b.save()
# filter() 方法
b = Ball.objects.filter(description="3号球")
# 注意:update() 和 delete() 是 QuerySet 的方法
b.update(ball_color=c,description="1号球")