这是我的模特
class Student:
user = ForeignKey(User)
department = IntegerField()
semester = IntegerField()
...
class Attendance:
student = ForeignKey(Student)
subject = ForeignKey(Subject)
month = IntegerField()
year = IntergerField()
present = IntegerField()
total = IntegerField()
students = Student.objects.filter(semester=semester)
如何在Student
和Attendance
模型之间执行右连接,以便获得包含所有students
和出勤率的查询集` if exists for a student,else null?
文档中提到了左连接,但没有提到右连接。
3条答案
按热度按时间v64noz0r1#
更改表主题的左连接
mwecs4sa2#
您可以使用这样的查询:
使用
select_related
,您可以JOIN
'ingAttendance
table。Django没有显式的join
ORM方法,但当您调用select_related
时,它会在内部执行JOIN
。结果查询集将包含所有具有联合出席的Student
,以及当您对每个学生调用attencande_set.all()
时-将不执行其他查询。检查_set
功能的文档。如果只想查询至少有一次出勤的学生,可以这样查询:
oug3syen3#
正确的方法是使用
fk_set__isnull=false
,如下所示:这会给你一个类似这样的查询:
"SELECT * FROM father INNER JOIN child ON (father.id = child.father_id) WHERE child.id IS NOT NULL"