仅显示子查询的总行数小于django queryset中的某个值的对象

Only show objects where the total amount of rows of a subquery is less than a certain value in django queryset

我正在尝试生成某个模型的列表,其中只有来自另一个查询的实例。所以这是我的模型:

class Waiter(models.Model):
    id = models.AutoField(primary_key=True)
    waiter = models.CharField(max_length=200)


class Service(models.Model):
    id = models.AutoField(primary_key=True)
    arrival = models.DateTimeField(auto_now_add=True)
    exit = models.DateTimeField(null=True, blank=True)
    waiter = models.ForeignKey('Waiter', on_delete=models.CASCADE)
    article = models.ForeignKey('Table', on_delete=models.CASCADE)
    total_amount= models.DecimalField(max_digits=15, decimal_places=2)

class Table(models.Model):
    id = models.AutoField(primary_key=True)
    table_no = models.CharField(max_length=200)

我们的想法是一次只能为一项服务分配四名服务员。我如何根据天气过滤服务员的结果他们一次少于四次服务?

这是我目前所做的信号:

@reciever(pre_save, sender=Service)
def prepare_service(sender, instance, *args, **kwargs):
    if instance.id = None:
        time = datetime.now()
        # check if waiter has less than four services HERE
        # the following code is WRONG


        current_services = Service.objects.filter(exit__gt=time)
        available_waiters = Waiter.objects.select_related\
            (waiter__in=Subquery())
        #check if waiter has less than four services

提前谢谢你:)

编辑:好的,我想我可能做对了。现在我对我的问题有了更新,因为我已经得到了 select 相关的计数,我该如何过滤计数模型,所以如果我只想计算我到达后服务结束的服务如何我会这样做吗?

这是我当前的行:

waiters = Waiter.objects.select_related('Service').annotate(num_Service=Count('Service', filter=Q(exit__gt=time)))
from django.db.models import Count

q = Waiter.objects.select_related('Service').annotate(num_Service=Count('Service'))
print Waiter[0].num_Service

基于此answer