Example #1
0
    def bulk_delete(self, request, *args, **kwargs):
        """
        Bulk delete instances
        """
        xform = self.__validate_permission_on_bulk_action(
            request, 'change_xform')
        payload = self.__get_payload(request)

        postgres_query, mongo_query = self.__build_db_queries(xform, payload)

        # Delete Postgres & Mongo
        updated_records_count = Instance.objects.filter(
            **postgres_query).count()

        # Since Django 1.9, `.delete()` returns an dict with number of rows
        # deleted per object.
        # FixMe remove `.count()` query and use that dict instance
        Instance.objects.filter(**postgres_query).delete()
        ParsedInstance.bulk_delete(mongo_query)
        return Response(
            {
                'detail':
                _('{} submissions have been deleted').format(
                    updated_records_count)
            }, status.HTTP_200_OK)
Example #2
0
    def bulk_delete(self, request, *args, **kwargs):
        """
        Bulk delete instances
        """
        xform = self.get_object()
        postgres_query, mongo_query = self.__build_db_queries(xform, request.data)

        # Disconnect redundant parsed instance pre_delete signal
        pre_delete.disconnect(_remove_from_mongo, sender=ParsedInstance)

        # Delete Postgres & Mongo
        all_count, results = Instance.objects.filter(**postgres_query).delete()
        identifier = f'{Instance._meta.app_label}.Instance'
        deleted_records_count = results[identifier]
        ParsedInstance.bulk_delete(mongo_query)

        # Pre_delete signal needs to be re-enabled for parsed instance
        pre_delete.connect(_remove_from_mongo, sender=ParsedInstance)

        return Response({
            'detail': t('{} submissions have been deleted').format(
                deleted_records_count)
        }, status.HTTP_200_OK)