I wan't to filter features of a Shapefile layer from a user's selection with PyQGIS. When I select less than 30 features with a method like fid=1 or fid=2 or fid=3 ..., everything works fine but when I select over 30 features filter doesn't work and return me all the features of the layer. If I try a filter like fid >= 1 and fid <=150 (for example), it works. But it doesn't help for lists of unfollowing ids. I'm using QGIS 3.10.2.
Is there something wrong with this ? Does filters have size limits ? Is there a better way to filter features ?
# Layer
layer = iface.activeLayer()
features = layer.selectedFeatures()
List ID of selected features
l = []
for feature in features:
l.append(feature.id())
Build arguments for the query
index = 0
query = []
prefix = 'fid='
while index < len(l)-1:
query.append(prefix)
query.append(l[index])
query.append(' or ')
index+=1
Last element of the list
query.append(prefix)
query.append(l[index])
Query
fullQuery = str(query).strip('[]').replace(',', '').replace("'", "")
Filter
layer.setSubsetString(fullQuery)
fid = 1 or fid = 2 or...you should usefid in (1,2,...). It improves code readability. – Germán Carrillo Dec 22 '20 at 13:13