我真的被困在了一个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]
任何帮助将不胜感激!
答案 0 :(得分:2)
来自django.db.models导入计数
Task.objects.exclude(assignments__status = 'R')。注释(assignments_count =计数( '分配')。过滤器(assignments_count__gt = N)