首页 > 解决方案 > 如何在 Django 中使用多个模型编写查询

问题描述

如何为登录的学生编写查询(student = self.request.user.id)以查看他的作业标题(属于他的摄入量)

    class intake(models.Model):
    intakecode = models.CharField(max_length=100)
    modules = models.ManyToManyField(Module, through='IntakeDetails')

    class Student(models.Model):
    user = models.OneToOneField(UserType, on_delete=models.CASCADE, 
    primary_key=True)
    intakecode = models.ForeignKey(intake, on_delete=models.CASCADE)

学生属于一个摄入量,每个摄入量有很多模块。

    class IntakeDetails(models.Model):
    intake = models.ForeignKey(intake, on_delete=models.CASCADE)
    lecturer = models.ForeignKey(Lecturer, on_delete=models.CASCADE)
     module= models.ForeignKey(Module, on_delete=models.CASCADE)

    class AssignAssignment(models.Model):
    title=models.CharField(max_length=30)
    duedate=models.DateField()
intakedetails=models.ForeignKey(IntakeDetails,on_delete=models.CASCADE,null=True)

我试过这个,但是如果有多个intakedetails,它会弹出一个错误。

@login_required
class ModelIndexView(ListView):
template_name= 'accounts/students/students.html'
context_object_name= 'students'
def get_queryset(self):
    student = self.request.user.id
    student_det = Student.objects.get(user_id=student)
    assignment=IntakeDetails.objects.get(intake_id=student_det.intakecode)
    queryset=AssignAssignment.objects.filter(intakedetails_id=assignment.id)
    return queryset

标签: djangomodels

解决方案


因为当您使用时objects.get,应该只有一行匹配您的查询。没有行或多行会导致错误-ObjectDoesNotExistMultipleObjectsReturned分别。

您可以使用此查询来获得您想要的结果:

AssignAssignment.objects.filter(intakedetails__intake_id=Student.objects.get(user_id=student).intakecode)

推荐阅读