【问题标题】:Join two collections of objects加入两个对象集合
【发布时间】:2012-02-12 02:23:17
【问题描述】:

我有两个模型,一个名为 Exam,一个名为 Grades

考试有主键id。 Grades 有外键 exam_id

我想要在成绩表中有条目的所有考试。

这就是我所拥有的:

grades = Grades.objects.all()
exams = Exam.objects.all().filter(grades__exam__id = id)

我收到此错误:

/考试中的类型错误

id() 只接受一个参数(给定 0)

你能帮帮我吗?

【问题讨论】:

  • 您对考试有任何强制执行成绩关系的限制吗?如果是这样,您可以使用不为空。或者,我认为您无意中使用了内置的 id() 函数。你在哪里定义 id ?
  • 是的,我对考试有强制执行成绩关系的限制。 isnull=False 返回考试中的所有记录,尽管与成绩有任何 FK 关系。 id 应该是考试中的字段
  • 这有效:exams = Exam.objects.all().filter(grades__id__isnull=False)

标签: python django join


【解决方案1】:

【讨论】:

    【解决方案2】:

    你的错误id() takes exactly one argument (0 given)是因为你引用了一个未定义的变量,所以它试图调用内置的默认id。

    要查找所有成绩为 FK 的人,您可以这样做:

    exams = Exam.objects.all().filter(grades__exam__id__isnull=False)
    

    【讨论】:

    • 这给了我考试中的所有对象,而不仅仅是那些有 FK 限制的对象
    • 这为您提供了与成绩有链接的考试。
    • 不,它没有。它给了我所有的考试,尽管有任何 FK 限制。我有 10 门考试,从 1 到 10 的 id,但在 Grades 表中只有一项考试,而exam_id 有 5 门。所以这应该只返回该考试,而是返回所有考试。
    • 但是我尝试了这个:exams = Exam.objects.all().filter(grades__id__isnull=False) 并且这有效
    • 我只能用你给我的东西,你说你的fk是grades__exam__id
    猜你喜欢
    • 2020-05-12
    • 2018-06-03
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2016-10-20
    • 2012-09-15
    相关资源
    最近更新 更多