如果子查询中的所有对象都具有特定值,则过滤Django 2中的对象

时间:2018-07-19 14:32:00

标签: python django filter subquery django-queryset

我有以下型号:

class FactoryDevice(models.Model)
    ...

class InspectionRegister(models.Model)
    factory_device = models.ForeignKey(FactoryDevice)
    inspection_date = models.DateTimeField()
    status = models.CharField(choices=choices.STATUS)

这是场景:

在工厂,每周都会检查设备。

我只希望过滤最后五个相关FactoryDevice的状态为InspectionRegister的{​​{1}}个。如果choices.REPPROVED中的最后五个InspectionRegister中的一个不具有FactoryDevice的状态,那么该choices.REPPROVED一定不能出现在结果中。

1 个答案:

答案 0 :(得分:0)

首先,我将为您的反向关系定义一个related_name,以使您的生活更轻松:

factory_device = models.ForeignKey(FactoryDevice, related_name='inspections')

然后可以执行以下操作:

queryset = FactoryDevice.objects
.prefetch_related(Prefetch(
    'inspections', # your related name
    InspectionRegister.objects.order_by('-inspection_date')[:5].filter(status=choices.REPPROVED),
    to_attr='failed_inspections'
)
.annotate(failed_count=Count('failed_inspections'))
)
.filter(failed_count__gte=5)