Python 如何将内部联接和分组方式转换为Django ORM?

Python 如何将内部联接和分组方式转换为Django ORM?,python,django,django-orm,Python,Django,Django Orm,我想将这个原始SQL更改为Django ORM,但无法转换 most_read_students = LendedBook.objects.raw(' SELECT student_id as id, name, surname, COUNT(*) as count FROM "Book_lendedbook" INNER JOIN User_student on Book_lendedbook.student_id=User_student.id where did_

我想将这个原始SQL更改为Django ORM,但无法转换

most_read_students = LendedBook.objects.raw('
SELECT student_id as id, name, surname, COUNT(*) as count 
FROM "Book_lendedbook" 
INNER JOIN User_student on Book_lendedbook.student_id=User_student.id 
where did_read=1 
group by student_id 
order by count DESC 
LIMIT 5')`
我试过了,结果很接近。但不幸的是,我不能做我想做的事。因为我想把这个表和另一个表连接起来

most_read_students = LendedBook.objects.values('student_id')
.filter(did_read=True, return_date__month=(datetime.datetime.now().month))
.annotate(count=Count('student_id'))
当我像这样使用与“User\u student”表相关的select\u时

most_read_students = LendedBook.objects.select_related('User_student')
.values('student_id', 'name', 'surname')
.filter(did_read=True, return_date__month=(datetime.datetime.now().month))
.annotate(count=Count('student_id'))
它抛出一个错误,如
无法将关键字“name”解析到字段中。选项包括:书本、书本id、读过的、id、是否归还、借出日期、归还日期、学生、学生id

但当我加入“User\u student”表时,我应该能够获得学生属性,如姓名

谢谢你的帮助

我解决了!

有趣的事实;我想我的问题不在于ORM。我不知道我可以通过将它添加到
.values('student\uu name','student\uu姓氏')
来访问student对象的属性,这是我在这篇文章上共享的最后一个代码

本守则

 LendedBook.objects.select_related('User_student')
.values('student_id', 'name', 'surname')
.filter(did_read=True, return_date__month=(datetime.datetime.now().month))
.annotate(count=Count('student_id'))
LendedBook.objects.select_related('User_student')
.values('student_id', 'student__name', 'student__surname')
.filter(did_read=True, return_date__month=(datetime.datetime.now().month))
.annotate(count=Count('student_id'))
遵守本守则

 LendedBook.objects.select_related('User_student')
.values('student_id', 'name', 'surname')
.filter(did_read=True, return_date__month=(datetime.datetime.now().month))
.annotate(count=Count('student_id'))
LendedBook.objects.select_related('User_student')
.values('student_id', 'student__name', 'student__surname')
.filter(did_read=True, return_date__month=(datetime.datetime.now().month))
.annotate(count=Count('student_id'))
顺便说一句,删除
。选择相关('User\u student')
不会影响结果

所以,用u解决了我的问题