VEUILLEZ que quelqu'un me corrige, mais je suppose que j'ai trouvé une solution, au moins pour mon propre cas.
Je veux travailler sur tous ces éléments dont les propriétés sont exactement égales à ... peu importe.
Mais j'ai plusieurs modèles, et cette routine devrait fonctionner pour tous les modèles. Et il fait:
def selectByProperties(modelType, specify):
clause = "SELECT * from %s" % modelType._meta.db_table
if len(specify) > 0:
clause += " WHERE "
for field, eqvalue in specify.items():
clause += "%s = '%s' AND " % (field, eqvalue)
clause = clause [:-5] # remove last AND
print clause
return modelType.objects.raw(clause)
Avec ce sous-programme universel, je peux sélectionner tous les éléments qui correspondent exactement à mon dictionnaire de combinaisons «spécifier» (nom de propriété, valeur de propriété).
Le premier paramètre prend un (models.Model),
le second un dictionnaire comme: {"property1": "77", "property2": "12"}
Et cela crée une instruction SQL comme
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
et renvoie un QuerySet sur ces éléments.
Ceci est une fonction de test:
from myApp.models import myModel
def testSelectByProperties ():
specify = {"property1" : "77" , "property2" : "12"}
subset = selectByProperties(myModel, specify)
nameField = "property0"
## checking if that is what I expected:
for i in subset:
print i.__dict__[nameField],
for j in specify.keys():
print i.__dict__[j],
print
Et? Qu'est-ce que tu penses?