一对多
id = models.IntegerField(primary_key=True)
# AutoField?
name = models.CharField(max_length=50)
age = models.IntegerField()
sex = models.IntegerField()
teacher = models.ForeignKey(Teacher, related_name = 'student_teacher')
class Meta:
managed = True
db_table = 'student'
id = models.IntegerField(primary_key=True)
# AutoField?
name = models.CharField(max_length=50)
class Meta:
managed = True
db_table = 'teacher'
id = models.IntegerField(primary_key=True)
# AutoField?
name = models.CharField(max_length=50)
age = models.IntegerField()
sex = models.IntegerField()
teacher = models.ForeignKey(Teacher)#, related_name = 'student_teacher')
class Meta:
managed = True
db_table = 'student'
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=50)
members = models.ManyToManyField(Student, through = "MemberShip")
class Meta:
managed = True
db_table = 'group'
id = models.IntegerField(primary_key=True) # AutoField?
student = models.ForeignKey(Student)
group = models.ForeignKey(Group)
class Meta:
managed = True
db_table = 'membership'
group = Group.objects.get(id=1)
studentList = group.members.all()
groupList = student.group_set.all()
MemberShip(group = newGroup, student = newStudent).save()
修改Student类 增加teacher属性
...
class Student(models.Model):
...
注意Teacher 类定义要发在Student之前
然后同步到数据库
使用一对多
获取student的teacher的name
teacher = student.teacher.name
通过teacher获得students
teacher = Teacher.objects.get(id = 1)
studentList = teacher.student_teacher.all()
或着 在不定义 related_name时
studentList = teacher.student_set.all()
删除
student.teacher.delete() 会删除teacher下所有student
新建
teacher.student_set.create(name = 'kaka', age = 23, sex = 1)
活着
student = Student(name = 'fill', age= 45, sex=0)
teacher.student_set.add(student)
--------------------------------------------------------------
多对多
定义Group类
class Teacher(models.Model):
class Student(models.Model):
class Group(models.Model):
class MemberShip(models.Model):
注:MemberShip可以不定义,建议定义
------------------------------------------------------------------
使用多对多