Django - Wählen Sie ein zufälliges Foto aus jedem Album

7

Ich versuche ein zufälliges Foto von jedem Album aus den Daten zu bekommen, die von syncr erstellt wurden. Das Modell (abgekürzt) sieht so aus:

%Vor%

Ich habe viele verschiedene Ansätze ohne Erfolg ausprobiert. Ist das ein anderer einfacher?

Take 2: Endgültiger Code:

def Galerien (Anfrage, Vorlagenname = 'Galerien.html'):

%Vor%     
PhoebeB 16.07.2009, 17:30
quelle

4 Antworten

8

Ich habe den Code nicht getestet, aber das ist die richtige Idee, und die select_related sollte Ihnen helfen, zu viele Datenbankabfragen zu machen ...

%Vor%     
Gabriel Hurley 16.07.2009, 17:39
quelle
24

Sie können ein einzelnes zufälliges Objekt aus einem beliebigen Queryset mithilfe der order_by -Methode mit einem Fragezeichen als Argument abrufen. Dies ist möglicherweise besser als das Aufrufen von Photo.objects.all (), da nur ein Fotoobjekt pro Abfrage von der Datenbank und nicht das gesamte Set zurückgegeben wird und anschließend die Liste mit Python gefiltert wird.

Diese Abfrage gibt beispielsweise ein einzelnes zufälliges Foto zurück:

Photo.objects.order_by('?')[:1]

Das Folgende ist nicht optimal, da es für jedes Album eine Abfrage benötigt, aber es würde funktionieren:

%Vor%

Bearbeiten: Der [0] -Index wurde in [:1] geändert, weil der erste einen IndexError auslöst, wenn der Albumn keine Fotos enthält.

Alternativ in Listenverständnis Syntax:

%Vor%     
sixthgear 16.07.2009 18:00
quelle
4
%Vor%     
Dan Lorenc 16.07.2009 17:37
quelle
3

Wenn Sie in Ihrem Albummodell eine benutzerdefinierte Methode erstellen, sieht das etwa so aus:

%Vor%

Dadurch wird ein zufälliges Foto von der aktuellen Albuminstanz zurückgegeben, d. h.

%Vor%

Hinweis: Nicht getesteter Code

    
Rob Golding 16.07.2009 17:42
quelle

Tags und Links