如何在与ponyorm有多对多关系的情况下选择记录

时间:2016-11-05 16:18:42

标签: python database ponyorm

我是ponyorm的新手。

假设我有这两个类以及它们之间的多对多关系:

class Student(db.Entity):
    id = PrimaryKey(str)
    name = Required(str)
    courses = Set("Course")

class Course(db.Entity):
    id = PrimaryKey(str)
    name = Required(str)
    semester = Required(int)
    students = Set(Student)

我想选择一些特定学生所遵循的课程。我所做的是:

student = Student.select(lambda s: s.id == id).get()
courses = Course.select(lambda c: c.students == student).get()

我收到了这个错误:

Incomparable types 'Set of Student' and 'Student' in expression: c.students == student

这样做的正确方法是什么? 感谢

1 个答案:

答案 0 :(得分:1)

我不知道确切的库,但我认为问题在于c.students指定了所有学生的集合,因此测试相等性并没有太多意义。

你可能想把你的第二行改成这样的东西(我没试过它):

Course.select(lambda c: student in c.students).get()

这让我想知道是否有更好的方法来做到这一点。如果您要尝试的只是检索特定学生参加的课程,为什么不从变量courses中检索student字段?

这样的东西
student = Student.select(lambda s: s.id == id).get()
student.courses # do something with it