Django复杂模型和嵌套查询

时间:2018-07-28 18:00:29

标签: django django-models django-rest-framework django-queryset

如何将复杂的查询写入 1)创建一个Student,Course,OptionOne-示例-

student_name=John,
  rollno = 20
  course1 = this field will refence a field in OptionOne, OptionOne will 
  reference the course desired. enter code here

  **illustration** - John Selects mathematics as the first option, while Mike 
  selects Geoography as Option One, Mathematics as Option Two 

2)选择所有选择数学的学生作为选项一    3)选择学生以及他选择的课程

django.db import models

 # Create your models here.
 class Course(models.Model):
 course_name = models.CharField(max_length=200)
 course_code = models.CharField(max_length=200)

class PriorityOne(models.Model):
    course = models.OneToOneField(Course, verbose_name=("Course"), 
             on_delete=models.CASCADE)

class PriorityTwo(models.Model):
     course = models.OneToOneField(Course, verbose_name=("Course"), 
     on_delete=models.CASCADE)

class PriorityThree(models.Model):
     course = models.OneToOneField(Course, verbose_name=("Course"), 
     on_delete=models.CASCADE)

class Student(models.Model):
    student_name=models.CharField(max_length=200)
    rollno = models.CharField(max_length=200)
    course1 = models.OneToOneField(PriorityOne,on_delete=models.CASCADE)
    course2 = models.OneToOneField(PriorityTwo,on_delete=models.CASCADE)
    course3 = models.ForeignKey(PriorityThree, on_delete=models.CASCADE)

1 个答案:

答案 0 :(得分:0)

如果多个学生可以参加同一门课程,则可以在此处使用M:M字段。该课程将具有引用Student模型的ManyToMany字段。这意味着可以将多个课程对象与一个学生关联,并且一个学生可以拥有多个课程。我知道在定义M2M字段的地方似乎有些奇怪。如果要设置优先级列表,则可以定义具有最高优先级过程pk的整数字段。当然,这是一种方法。 M2M字段的任何语法都在此处Django M2M docs中。如果您需要进一步的解释,我们将很乐意为您提供帮助。