【问题标题】:Django complex models and Nested QueriesDjango 复杂模型和嵌套查询
【发布时间】:2019-01-05 12:29:09
【问题描述】:

如何编写一个复杂的查询 1) 创建一个学生,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)

【问题讨论】:

  • 你有什么问题?
  • 是的,我不确定您是否会询问有关模型开发的架构问题,或者您是否不知道如何为您想要完成的任务编写某些语法。一个正式的问题会很好。
  • 是的,它是一个模型开发,我尝试了很多对很多,但它没有锻炼
  • 我的问题是:如何创建模型来构建这些复杂的关系
  • 一个学生可以在课程列表中选择三门课程,但他必须在这三门课程中优先考虑

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


【解决方案1】:

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

【讨论】:

  • 首先感谢您的回复,我要实现多对多字段。但我不知道如何实现优先级。主要问题是学生可以设置并且可以拥有自己的优先级列表。因此,优先级列表可能因学生而异
  • 嗯,你可以在它们之间有一个中间模型Priority,它将占用 1 门课程和优先级编号。然后您的学生将有多个优先级,这将是一个外键字段。这可能不是一个理想的实现方式。
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2021-02-02
  • 1970-01-01
  • 2022-01-01
  • 2021-10-02
  • 2018-07-29
相关资源
最近更新 更多