2010-10-05 12 views
1

Je souhaite interroger qu'un utilisateur peut sélectionner ou non un filtre, mais je ne souhaite pas créer 2 index (tables).AppEngine: requête datastore pour les enregistrements sans condition pour une propriété spécifique

value=self.request.get('filter') 
if value: 
    results=Entity.all().filter('p1 =','v1').filter('p2 =','v2').filter('filter_property =',value) 
else: 
    results=Entity.all().filter('p1 =','v1').filter('p2 =','v2') 

Je pourrais commander la propriété filter_property. comme celui-ci dans la dernière ligne:

results=Entity.all().filter('p1 =','v1').filter('p2 =','v2').order('filter_property') 

ce serait mauvais si je pouvais ou ne pouvait filtrer p1 (Propriété1) et p2 (property2). je voudrais faire quelque chose comme:

value = self.request.get('filter') 
if value: 
    operator = '=' 
else: 
    operator = '!=' 
results=Entity.all().filter('p1 =','v1').filter('p2 =','v2').filter('filter_property '+operator,value).order('p4') 

".order ('p4')" échouera BadArgumentError avec l'opérande =!.

que devrais-je faire?

Répondre

0

Il semble que vous ayez une bonne idée des alternatives. Vous pouvez ajouter des clauses de commande pour remplacer les filtres si vous souhaitez que le magasin de données utilise le même index pour chacun d'eux; Sinon, vous êtes coincé avec plusieurs index.