2012-03-23 12 views
10

Ich habe eine Liste von IDs für Objekte, die ich ergreifen muss, dann muss ich sie nach ihrem Zeitstempel sortieren. Hier ist, wie ich wollte, es tun:Django: Nehmen Sie eine Reihe von Objekten aus ID-Liste (und sortieren nach Zeitstempel)

For i in object_ids: 
    instance = Model.objects.get(id = i) 
    # Append instance to list of instances 

#sort the instances list 

Aber es gibt zwei Dinge, die mich stören:

  • Gibt es keine Möglichkeit, eine Sammlung von Einträgen durch eine Liste ihrer IDs zu greifen - ohne schleifen?
  • Kann ich beliebige Objekte basierend auf ihren IDs an das QuerySet anhängen?

Danke,

Antwort

18

Dies kann unter Verwendung eines solchen Code getan werden.

+4

Was ist der beste Weg, um die zurückgegebenen Objekte in der gleichen Reihenfolge wie die Liste object_ids zu erhalten? Der OP Code? – Chris

+2

Ich würde wahrscheinlich die Daten von der Datenbank mit nur einem Anruf (wie oben) abrufen und dann die Sortierung in Ihrem Code vornehmen. Sollte schneller sein als die Abfrage der Datenbank N-mal. Vor allem mit einem großen N. – kender

+0

@kender @Chris Haben wir irgendeine Lösung für 'in der gleichen Reihenfolge wie die object_ids-Liste' statt nach dem Abrufen zu sortieren? – Dipak

8

Versuchen Sie Folgendes:

result = Model.objects.filter(id__in=object_ids) 

Dies gibt alle Model Objekte, die ihre id in der gegebenen Liste von object_ids haben. Auf diese Weise müssen Sie dem resultierenden QuerySet auch keine zusätzlichen Modelle hinzufügen.

objects = Model.objects.filter(id__in=object_ids).order_by('-timestamp') 

das sein order_by kann positiv oder negativ timestamp, je nachdem, wie Sie sie sortiert:

Verwandte Themen