Django查询以检索满足相关表上的聚合条件的行

时间:2014-08-28 23:44:50

标签: python django

我真的被困在了一个Django查询中,我希望你有几分钟时间来帮助我搞清楚。

我有一个非常简单的模型:

class Task(models.Model):
    # a tuple representing a specific item to be searched for a specific URL
    instructions = models.TextField()

ASSIGNMENT_STATUS_CHOICES = (
    ( 'a', 'assigned' ),
    ( 'c', 'submitted for review' ),
    ( 'f', 'finished' ),
    ( 'r', 'rejected' ),
)

class Assignment(models.Model):
    # the overall container representing a collection of terms for a page found
    # by a user
    user = models.ForeignKey(User)
    task = models.ForeignKey(Task, related_name='assignments')
    status = models.CharField(max_length=1, choices=ASSIGNMENT_STATUS_CHOICES, default='a')

我想要做的是随机选择一个任务,该任务的状态少于N个!='r'。换句话说,我想确保每个任务成功完成N次,因此如果一个工作人员请求一个任务,它需要一个在一个可能导致完成的状态下少于N个任务的任务。

我完全失去了试图找出将返回此类任务的查询。对于给定的任务,我可以测试:

task.assignments.exclude(status='r').count() < N

如果这是真的,那就是候选人。但是我如何以这样的方式查询Task.objects,它返回单个数据库查询中的所有候选项,以便我可以随机选择一个:

Task.objects.<some magic filter>.order_by('?')[0]

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

来自django.db.models导入计数

Task.objects.exclude(assignments__status = 'R')。注释(assignments_count =计数( '分配')。过滤器(assignments_count__gt = N)