2017-06-06 3 views
0

Verwendung: Heuhaufen und Sorl.Django Heuhaufen. Und oder in Suchabfragensatz

Ich brauche ein Suchabfragenset, um Produkte nach Filter zu suchen.

Erstens muss ich nur Produkte basierend auf meiner Website (Django Site Framework) filtern. So tue ich:

sqs = sqs.filter(site=site.pk) 

Es gibt solche Suchkriterien:

site:(6) 

OK.

Dann brauche ich nach Attributen filtern:

sqs = sqs.filter(attribute_codes='power', attribute_values__range=(20, 30)) 
sqs = sqs.filter(attribute_codes='power', attribute_values__range=(40, 50)) 

Und es erzeugt eine solche Abfrage:

(site:(6) AND attribute_codes:(power) AND attribute_values:(["20" TO "30"]) AND attribute_values:(["40" TO "50"])) 

Aber ich brauche eine Abfrage wie folgt zu machen:

(site=6) AND ((attributes1) OR (attributes2)) 

Also habe ich versucht, die Filterung nach Attributen zu filter_or:

zu ändern
sqs = sqs.filter_or(attribute_codes='power', attribute_values__range=(20, 30)) 
sqs = sqs.filter_or(attribute_codes='power', attribute_values__range=(40, 50)) 

Und das Ergebnis ist:

(site:(6) OR (attribute_codes:(power) AND attribute_values:(["20" TO "30"])) OR (attribute_codes:(power) AND attribute_values:(["40" TO "50"]))) 

Aber ich brauche sonst:

(site=6) AND ((attributes1) OR (attributes2)) 

Also, wie dies zu tun? Helfen Sie mir, bitte

Antwort

1

wie Djangos queryset Q Objekt hat django Heuhaufen ein SQ Objekt, das um Hilfe | und & Operatoren in Filterung

sqs = sqs.filter(site=6) 
sqs = sqs.filter(SQ(attribute_codes='power') | SQ(attribute_values__range=(20, 30)) 

oder

sqs = sqs.filter(
    SQ(site=6) & (SQ(attribute_codes='power') | SQ(attribute_values__range=(20, 30)) 
) 
+0

Vielen Dank ermöglicht die Verwendung –

Verwandte Themen