知識(shí)要點(diǎn):
表關(guān)系的實(shí)現(xiàn)
一對(duì)多表關(guān)系
在Mysql中一對(duì)多是通過(guò)外鍵實(shí)現(xiàn)的,在django模型中通過(guò)ForeignKeyfield類型實(shí)現(xiàn)。
一對(duì)一表關(guān)系
在Mysql中一對(duì)一是通過(guò)外鍵加唯一鍵實(shí)現(xiàn)的,在django模型中通過(guò)OneToOneField類型實(shí)現(xiàn)。
多對(duì)多表關(guān)系
在Mysql中多對(duì)多是通過(guò)中間表外鍵加聯(lián)合唯一鍵實(shí)現(xiàn)的,在django模型中通過(guò)ManyToManyField類型實(shí)現(xiàn)。中間表模型會(huì)自動(dòng)幫我們創(chuàng)建好筋蓖。
例子:
class Department(models.Model):
d_id = models.AutoField(primary_key=True)
d_name = models.CharField(max_length=30)
def __str__(self):
return 'Department<d_id=%s,d_name=%s>'%(
self.d_id,self.d_name
)
class Student(models.Model):
s_id = models.AutoField(primary_key=True)
s_name = models.CharField(max_length=30)
department = models.ForeignKey('Department')
course = models.ManyToManyField('Course')
def __str__(self):
return 'Student<s_id=%s,s_name=%s>'%(
self.s_id,self.s_name
)
class Course(models.Model):
c_id = models.AutoField(primary_key=True)
c_name = models.CharField(max_length=30)
def __str__(self):
return 'Course<c_id=%s,c_name=%s>'%(
self.c_id,self.c_name
)
class Stu_detail(models.Model):
s_id = models.OneToOneField('Student')
age = models.IntegerField()
gender = models.BooleanField(default=1)
country = models.CharField(max_length=30,null=True)
def __str__(self):
return 'Stu_detail<s_id=%s,age=%s,gender=%s,country=%s>'%(
self.s_id,self.age,self.gender,self.country
)
關(guān)系表中數(shù)據(jù)的操作
from .models import Department,Student,Course
def add_info(request):
# d1 = Department(d_name='CC')
# d1.save()
# 一對(duì)多關(guān)系加內(nèi)容
# s1 = Student(s_name='xiaoming')
# s1.department = d1
# s1.save()
# 多對(duì)多關(guān)系添加內(nèi)容
# c1 = Course(c_name='python')
# s1 = Student.objects.first()
# c1.save()
# s1.course.add(c1)
return HttpResponse('添加數(shù)據(jù)成功')
def search_info(request):
rs = Student.objects.all()[0]
# 一對(duì)多的查詢
print(rs.department)
# 多對(duì)多的正向查詢
print(rs.course.all())
cs = Course.objects.first()
# 多對(duì)多反向查詢
print(cs.student_set.all())
return HttpResponse('查詢數(shù)據(jù)成功')