模型对应关系
文档将对模型的对应关系一对一、一对多、多对多的关系进行实例分析介绍
- 1:1 OneToOneFileld
- 1:N ForeignKey
- M:N ManyToManyField
模型
#创建班级表()
class Grade(models.Model):
g_name = models.CharField(max_length=10)
#表名(不设置表名默认是:应用名_类名,app_grade,数据库名自动小写没有大写)
class Meta:
db_table = 'grade'
#创建一个学生表(学生与班级是一对多)
class Student(models.Model):
s_name = models.CharField(max_length=20,unique=True)
s_age = models.IntegerField(default=16)
s_sex = models.BooleanField(default=1)
#学生表与班级是一对多
g = models.ForeignKey(Grade,null=True)
#表名
class Meta:
db_table = 'student'
#创建一个学生信息表(学生信息与学生是一对一)
class StudentInfo(models.Model):
adderss = models.CharField(max_length=20,null=True)
phone = models.IntegerField(null=True)
#学生信息表与学生表一对一
stu = models.OneToOneField(Student)
#表名
class Meta:
db_table = 'StudentInfo'
#创建一个课程信息表(课程与学生是多对多)
class Coures(models.Model):
c_name = models.CharField(max_length=10)
#课程表与学生表是多对多
stu = models.ManyToManyField(Student)
#表名
class Meta:
db_table = 'course'
- 上面的代码我们创建了一对一、一对多、多对多,从以上的例子中出发去了解他们之间的关系
- 建立好模型在对应的python环境下进行迁移生成数据库,并手动添加数据
- 一对一即学生与学生信息
#在视图中添加学生数据
def addStu(request) :
if request.method == 'GET':
Student.objects.create(s_name='妲己', s_age=20, s_sex=False)
return HttpResponse('创建成功')
#在视图中删除学生信息
def delStu(request):
if request.method == 'GET':
stu = Student.objects.filter(id=13)
stu.delete()
return HttpResponse("删除成功")
#找到对应信息
def oneToOneStu(request):
if request.method == 'GET':
#在学生模型中找到学生对象
stu = Student.objects.get(id=1)
#通过学生对象找一对一关联表信息
#使用学生对象.学生信息表名(小写)获得信息表对象
stuinfo = stu.studentinfo
return HttpResponse(stuinfo