django - 如何在 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
解决方案
因为当您使用时objects.get
,应该只有一行匹配您的查询。没有行或多行会导致错误-ObjectDoesNotExist
和MultipleObjectsReturned
分别。
您可以使用此查询来获得您想要的结果:
AssignAssignment.objects.filter(intakedetails__intake_id=Student.objects.get(user_id=student).intakecode)
推荐阅读
- python-3.x - 如何从另一个脚本执行代码并传递参数
- powershell - 带有输入文件的 Power Shell 上的 Active Directory 查询
- bootstrap-4 - 如何在引导程序 4 中更改指示器的颜色
- r - 添加缺少的小数(001=0.01 和 01=0.1)
- r - 计算一列的重复观察值但另一列的值不同的平均值
- java - 如何使用 Java 在 Druid Timeseries 数据库中加载和查询数据
- android - Android 11 - Kiosk 模式锁屏 NFC 问题
- module - 如何在 Drupal 中存储每个用户的特定数据
- css - CSS max-width 和 max-height 导致图像被拉伸
- node.js - 推送 axios 响应和其他数据后数组为空:Node.Js