首先我們編輯 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號球”。
查詢數(shù)據(jù)
子表查詢母表:
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號球'
添刪數(shù)據(jù)
添加:
# 創(chuàng)建一個新的 Colors 對象
c = Colors.objects.create(colors="blue")
# 創(chuàng)建一個新 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()
修改數(shù)據(jù)
修改顏色
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號球")