我有以下型号:
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
一定不能出现在结果中。
答案 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)