【问题标题】:Query for manytomany multiple tables for getting data of multiple models in django在 django 中查询多张表以获取多个模型的数据
【发布时间】:2018-02-09 02:55:25
【问题描述】:

我正在尝试解决以下情况:

许多学生有很多科目但只有一些科目被标记为他当前的科目,一个教室有多个科目,学生可以携带其他教室的科目,可以从他当前的教室检查。

我想获取学生当前拥有的所有科目以及该科目拥有的所有课堂以及课堂状态,无论是当前的还是非当前的。

class Student(models.model):
    id = models.OnetoOneField(User)

class Subject(models.Model):
    Subject_Master_Id=models.AutoField(primary_key=True)
    Subject_Name=models.CharField(max_length=100,blank=False,unique=True)
    user = models.ManyToManyField(Student,through = 'Student_Subject')

class Classroom(models.Model):
    Class_Master_Id=models.AutoField(primary_key=True)
    Classroom_Student = models.ManyToManyField(Student,through='Classroom_Student',related_name='classroom_student')
    Classroom_Subject = models.ManyToManyField(Subject,through='Classroom_Subject',related_name='classroom_subject')

class Student_Subject(models.Model):
    Student_Subject_Id = models.AutoField(primary_key=True)
    subject= models.ForeignKey(Subject,on_delete =  models.CASCADE, related_name='student_subject')
    user=models.ForeignKey(Student,on_delete = models.CASCADE, related_name='student_subject')
    is_current = models.BooleanField()    

class Classroom_Student(models.Model):
    Classroom_Student_Id=models.AutoField(primary_key=True)
    Classroom_Id=models.ForeignKey(Classroom,on_delete=CASCADE)
    Student_Id=models.ForeignKey(Student,on_delete=CASCADE, related_name= 'student')
    is_current = models.BooleanField()

class Classroom_Subject(models.Model):
    Classroom_Subject_Id=models.AutoField(primary_key=True)
    Classroom_Id=models.ForeignKey(Classroom,on_delete=CASCADE)
    Subject_Id=models.ForeignKey(Subject,on_delete=CASCADE, related_name='subject') 

【问题讨论】:

    标签: django django-views many-to-many python-3.4 django-orm


    【解决方案1】:

    好的,我将通过彻底简化您的模型来解决这个问题:

    models.py

    class Subject(models.Model):
        name=models.CharField(max_length=100,blank=False,unique=True)
        students = models.ManyToManyField(Student)
        classroom = models.ForeignKey(Classroom)
    
    class Classroom(models.Model):
        name=models.CharField(max_length=100,blank=False,unique=True)
    
    class Student(models.Model):
        id = models.OnetoOneField(User)
        current_location = models.ForeignKey(Classroom, null=True,blank=True)
    

    在阅读您的目标时,“我想获取学生当前拥有的所有课堂以及这些学科拥有的课堂状态的所有科目,无论是当前的还是非当前的。”

    这就是我理解你在问的问题: 1. 学生学习什么科目? 2. 每个科目: 3. 提供该科目教室的详细信息 4. 回答该教室是否是学生当前的教室。

    views.py

    # say we are given variable student, an instance of Student model...
    students_subjects = student.subject_set.all(id=student.id)
    for subject in students_subjects:
        description = "Subject:"+subject.name+" is in classroom:"+subject.classroom+" which is "
        if not student.subject_set.filter(classroom=student.current_location).exists():
            description += "not "
        description += "their current location."
        print(description)
    

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2022-10-02
      • 2020-11-29
      相关资源
      最近更新 更多