一: 一对一
首先创建一个django项目,并且在设置里进行配置,连接到Mysql 数据库,在myApp 文件夹的 models 文件进行如下配置, 表示创建两个数据表,里面各有自己的字段,
其中第二个数据表Card 的最后一个字段person,为链接到数据表Person
from django.db import models
# Create your models here.
class People(models.Model):
name = models.CharField(max_length=20)
sex = models.NullBooleanField(null=True, default=True)
age = models.IntegerField(null=True)
class Card(models.Model):
code = models.CharField(max_length=20)
address = models.CharField(max_length=100)
person = models.OneToOneField(People, on_delete=models.CASCADE, primary_key=True)
然后再view.py 文件中进行如下配置,并在Url.py 中进行相应的配置
from django.shortcuts import render
from django.http import HttpResponse
from .models import People, Card
def index(reuqest):
p1 = People(name='大一', age=11, sex=True)
p2 = People(name='大二', age=12, sex=True)
p3 = People(name='大三', age=13, sex=True)
p4 = People(name='大四', age=14, sex=True)
# p1.save()
# p2.save()
# p3.save()
# p4.save()
c1 = Card(person=p3, code='3333', address='地址3')
c2 = Card(person=p4, code='4444', address='地址4')
c3 = Card(person=p2, code='2222', address='地址2')
c4 = Card(person=p1, code='1111', address='地址1')
# c1.save()
# c2.save()
# c3.save()
# c4.save()
return HttpResponse('fuck')
#
def select(request):
c4 = Card.objects.get(address='地址1')
print(c4.code) # 1111
print(c4.person.name) # 大一
c3 = Card.objects.get(address='地址2')
print(c3.person.name) # 大二
# 获取和card 对象绑定的对象中的name 字段
# 这个要是反着理解的话,可能会好一点?
# 比如 找到name='大三',是p3,
# 再找p3对应的person, 是c1,
# 最后打印c1的地址,输出 地址3
c1 = Card.objects.get(person__name='大三')
print(c1.address) # 地址3
c1_ = Card.objects.get(code='3333')
print(c1_.address) # 地址3
# 获取和people对象绑定的对象中的address字段
p1 = People.objects.get(card__address='地址1')
print(p1.name) # 大一
return HttpResponse('you')
二: 一对多
所有的都与前面的一样,只是models.py 和 views.py 两个文件不同,所以只对这两个文件进行说明
models.py 文件:
from django.db import models
# Create your models here.
class People(models.Model):
name = models.CharField(max_length=50)
card_num = models.CharField(max_length=100, default=0)
# 重新设置表名
class Meta:
db_table = 'people'
class Card(models.Model):
number = models.CharField(max_length=20)
person = models.ForeignKey(People, on_delete=models.CASCADE)
source = models.CharField(max_length=50)
class Meta:
db_table = 'Card'
views.py 文件
from django.shortcuts import render
from django.http import HttpResponse
from .models import People, Card
def index(request):
p1 = People.objects.create(name='小王', card_num=4)
p2 = People.objects.create(name='老王', card_num=40)
c1 = Card(number='101', source='中国银行', person=p1)
c2 = Card(number='102', source='中国农行', person=p1)
c3 = Card(number='103', source='中国建行', person=p1)
c4 = Card(number='201', source='python', person=p2)
c5 = Card(number='202', source='Java', person=p2)
c6 = Card(number='203', source='NodeJS', person=p2)
c7 = Card(number='204', source='HTML5', person=p2)
# c1.save()
# c2.save()
# c3.save()
# c4.save()
# c5.save()
# c6.save()
# c7.save()
return HttpResponse('hahah')
def select(request):
c1 = Card.objects.get(number='203')
print(c1.person.name) # 老王
c2 = Card.objects.get(id=3)
print(c2.person.name) # 小王
result = c2.person.card_set.all()
print(result) # c2 所有字段的集合
for res in result:
# print(res) # Card object (1) Card object (2) Card object (3)
# print(res.source) # 中国银行 中国农行 中国建行
# print(res.person) # People object (1) People object (1) People object (1)
print(res.person.name) # 小王 小王 小王
result = People.objects.get(name='老王')
for card in result.card_set.all():
print(card.source) # pythonJavaNodeJSHTML5
return HttpResponse('fuck')
三: 多对多
没运行出来, 还得再磨磨