Django ORM的复杂查询

Django ORM的复杂查询,django,django-orm,Django,Django Orm,我试图使用Django的ORM执行一个复杂的查询,但似乎找不到一个好的解决方案。也就是说,我有一个web应用程序,用户可以根据视频回答问题。我需要显示指定用户的所有视频,其中至少有一个问题未回答(未回答)。我还没能用ORM解决这个问题。。。我知道我可能会为此编写一个SQL查询,并使用原始SQL函数执行它,但我真的更愿意留在ORM中 模型:视频、问题、响应和默认用户 关系: 这个问题与视频有多对多的关系 每个问题、视频和用户的回答都有一个外键 查询需要执行的操作: 显示指定用户的所有视频,其

我试图使用Django的ORM执行一个复杂的查询,但似乎找不到一个好的解决方案。也就是说,我有一个web应用程序,用户可以根据视频回答问题。我需要显示指定用户的所有视频,其中至少有一个问题未回答(未回答)。我还没能用ORM解决这个问题。。。我知道我可能会为此编写一个SQL查询,并使用原始SQL函数执行它,但我真的更愿意留在ORM中

模型:视频、问题、响应和默认用户

关系:

  • 这个问题与视频有多对多的关系
  • 每个问题、视频和用户的回答都有一个外键
查询需要执行的操作:

  • 显示指定用户的所有视频,其中至少有一个视频问题未回答(未回答)
任何帮助都会很棒!我已经为此挣扎太久了

编辑:我拥有的模型是(简化的):


从逻辑上看,从你的模型的样子来看,我认为接近以下的东西应该是好的

q = Response.objects.select_related().filter(user__name=user).filter(response__choice=None)

videos = Video.objects.filter(id__in=q.extra(where=["{}>=1".format(q.count())]).values('video_id'))

希望你明白我在那里做了什么。第一行基本上尝试采用模型对象的自然连接。第二行使用第一行中生成的查询获取计数并检查其是否至少为1,并获取属于该查询的视频。

共享您拥有的模型。这将更容易帮助wayQuestion视频是多对多?为什么?似乎每个问题只涉及一个视频,即使每个视频都有许多问题。是的,问题视频是多对多的,因为我们希望能够将同一个问题应用于多个视频。例如,这段视频中你最喜欢的方面是什么。这个问题适用于许多视频。
q = Response.objects.select_related().filter(user__name=user).filter(response__choice=None)

videos = Video.objects.filter(id__in=q.extra(where=["{}>=1".format(q.count())]).values('video_id'))