Python 如何将内部联接和分组方式转换为Django ORM?
我想将这个原始SQL更改为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_
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解决了我的问题强>