2016-05-10 10 views
2

Ich wollte eine Abfrage basierend auf einer Liste durchführen. Ich weiß, dass ich das tun kann:So Fragen Sie die Liste ab, während Sie die Reihenfolge beibehalten

lists = [Everton, Liverpool, Villa] 
queryset = Betting.objects.filter(matches__in=list) 

Allerdings fragt dies nicht die Tabelle in der Reihenfolge ab. Der Betrieb mache basiert auf fuzzywuzzy und ist von entscheidender Bedeutung die Abfrage in der Reihenfolge der Liste erfolgt

ich diese Lösung gesehen haben django-create-a-queryset-from-a-list-preserving-order.html aber es funktioniert nicht mit SQLLite

Thanks..Any Hilfe zu funktionieren scheinen sei darauf hingewiesen,

+0

ORM Tabelle abgefragt werden [1] und der Rest in der Reihenfolge, wie sie in der Liste erscheinen –

+0

Können Sie angeben, welche genaue Reihenfolge Sie suchen? –

+0

Benötigen Sie wirklich ein Abfrage-Set? Wenn nicht, könnten Sie einfach Python nach der Abfrage sortieren. –

Antwort

0

Nicht wirklich Effizienz sicher, aber es kann ein Weg sein

lists = [Everton, Liverpool, Villa] 
queryset = Betting.objects.all() 
for i in lists: 
    queryset = queryset.filter(matches=i) 

der Grund, warum Sie tun können, ist, dass, wenn Sie das tun, queryset.filter (eine Bedingung) .filter (eine andere Bedingung), dann das Ergebnis ist eigentlich die Vereinigung beider Filter in der Reihenfolge

1

versuchen, etwas wie folgt aus: in der Reihenfolge der list..ie..It prüft zuerst für die Liste [0], Liste

from django.db.models import Case, Value, When, IntegerField 

cases = [When(matches=x, then=Value(i)) for i,x in enumerate(lists)] 
case = Case(*cases, output_field=IntegerField()) 
queryset = Betting.objects.filter(matches__in=lists) 
queryset = queryset.annotate(my_order=case).order_by('my_order') 
+0

Danke ..aber was ist 'output_field = IntegerField()' –

+0

'von django.db.models Import IntegerField', um die Ausgabe der Fallprüfung zu speichern – wim

Verwandte Themen