Ich arbeite gerade an einer Suche nach meiner Django-Site und möchte eine Abfrage durchführen, um zu sehen, wie oft sie in einem Beitragsnamen und einer Beschreibung erscheint und die Ergebnisse mit den Posts mit der Suchanfrage zurückgibt das meiste an der Spitze (dh wenn ich nach "Auto" suche, sollte ein Posten mit Auto erwähnt 5 Mal vor einem Posten erscheinen, der "Auto" einmal erwähnt).Gefilterte Ergebnisse nach Gesamtvorkommen sortieren
Hier ist mein views.py:
def stack_list(request, query):
context_dict = {}
stacks_list = Stack.objects.filter(
Q(name__icontains=query) |
Q(description__icontains=query)
).annotate(total_occurance=Count('name')+Count('description')
).order_by('total_occurance').distinct()
context_dict['stacks_list'] = stacks_list
return render(request, 'stack/index_search_results.html', context_dict)
und meine html:
{% for stack in stacks_list %}
<p>{{ stack.name }}
{{ stack.description }}</p>
{% endfor %}
Allerdings, wenn ich eine Abfrage versuchen, es organisieren nicht es in absteigender Reihenfolge. Irgendwelche Ideen, wo ich falsch liege?
In aufsteigender Reihenfolge? Oder nicht bestellt? –
Es scheint überhaupt nicht bestellt zu werden – ng150716
Versuchen Sie, die '.distinct()' zu entfernen. Es scheint, dass ein Problem auftritt, wenn Sie distinct mit order_by verwenden. (https://docs.djangoproject.com/de/1.10/ref/models/querysets/#distinct) –