Καθαρότερο τρόπο για την αναζήτηση για μια δυναμική αριθμό των στηλών του Django;

ψήφοι
0

Στην περίπτωσή μου, έχω μια σειρά από στήλη τα ονόματα προέρχονται από ένα έντυπο. Θέλω να φιλτράρετε για να βεβαιωθείτε ότι είναι όλα αλήθεια. Εδώ είναι πώς μπορώ σήμερα να κάνω:

for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Τώρα δουλεύει , αλλά υπάρχουν είναι δυνατόν ~ 40 στήλες για να δοκιμαστεί και ως εκ τούτου, δεν φαίνεται πολύ αποτελεσματική για να κρατήσει επερώτηση.

Υπάρχει κάποιος τρόπος που μπορώ να συμπυκνωθεί αυτό σε ένα ερώτημα φίλτρο εκεί;

Δημοσιεύθηκε 09/12/2008 στις 18:00
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
9

Φτιάξτε το ερώτημα ως ένα λεξικό και να χρησιμοποιήσετε το ** χειριστή να ανοίξει τις επιλογές ως επιχειρήματα λέξη-κλειδί με τη μέθοδο του φίλτρου.

op_kwargs = {}
for op in self.cleaned_data['options']:
    op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)

Αυτό καλύπτεται από την τεκμηρίωση του Django και έχει καλυφθεί σε SO επίσης.

Απαντήθηκε 09/12/2008 στις 18:37
πηγή χρήστη

ψήφοι
3

σύνολα ερώτημα Django είναι τεμπέληδες, οπότε αυτό που κάνουν αυτή τη στιγμή είναι πραγματικά πολύ αποτελεσματική. Η βάση δεδομένων δεν θα πρέπει να χτυπήσει μέχρι να προσπαθήσετε να αποκτήσετε πρόσβαση σε ένα από τα πεδία της QuerySet ... υποθέτοντας, δηλαδή, ότι δεν έχετε επεξεργαστεί κάποιο κώδικα, και είναι αποτελεσματικά σαν αυτό:

cars = CarModel.objects.all()
for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Περισσότερες πληροφορίες εδώ .

Απαντήθηκε 09/12/2008 στις 21:57
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more