Параметр collection_name элемента db.ReferenceProperty "student" в классе Bill уже настроил запрос для вас. Так что все, что вам нужно сделать, это:
student = Student.all().filter('name =', 'Samuel').get()
for bill in student.bills:
logging.info('Student %s Month:%s Energy:%d' % (student.name, str(bill.bill_month), bill.energy)
Теперь результаты, возвращаемые запросом с обратной ссылкой, неупорядочены. Вы можете (если ваши индексы настроены правильно) использовать .order (), чтобы вернуть их в определенном порядке, или вы можете поместить их в набор и отсортировать их в памяти (очень быстро) следующим образом:
sorted_bills = []
for bill in student.bills:
sorted_bills.append(bill)
# Sort additions by month then by amount (secondary key sorts first in code)
sorted_bills = sorted(sorted_bills, key=lambda Bill: Bill.energy, reverse=True)
sorted_bills = sorted(sorted_bills, key=lambda Bill: Bill.bill_month, reverse=False)
В этом примере, если у студента было более одного счета с одним и тем же значением bill_month, самые большие счета будут отсортированы первыми (обратите внимание на обратный параметр = True).