仅显示子查询的总行数小于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
我正在尝试生成某个模型的列表,其中只有来自另一个查询的实例。所以这是我的模型:
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