2009-06-09 8 views
2

Ich habe Django-Modelle, die Listen von Elementen sind, und ich möchte, dass die Elemente in jeder Liste eine separate Sortierreihenfolge haben. Vielleicht sortiert die Liste 1 die Werbebuchungen nach Name, listet 2 nach Datum auf und listet 3 nach Priorität auf.Angeben von Django Modell Sortierung

Die Modelle sieht mehr oder weniger wie folgt aus:

class ListItem(models.Model): 
    priority = models.IntegerField(choices=PRIORITY_CHOICES) 
    name = models.CharField(max_length=240) 
    due_date = models.DateTimeField(null=True, blank=True) 
    list = models.ForeignKey(List) 

Im Moment habe ich diese Abfrage in meiner Sicht bin mit:

lists = List.objects.filter(user=request.user) 
return render_to_response('showlists.html', {'lists': lists }) 

ich Beispiele gelesen haben, die bedeuten, dass ich tun konnte, etwas wie dieses:

Angenommen, dass funktionierte, würde es mir die Sammlung von Listen mit einem identischen geben Sortierreihenfolge für jede Charge von Artikeln. Wie würde ich die einzelnen Elemente der einzelnen Liste anders sortieren?

Antwort

3

Die Syntax für die Bestellung über ähnliche Modelle kick off

list = <...code to get sublist here ...> 
list.sort(key=lambda x: x.due_date) #sort by due date, say 

Andernfalls eine Abfrage Tagging ist die gleiche Doppelstrich Format wie für filter, so können Sie tun:

List.objects.filter(user=request.user).select_related().order_by("listitems__name") 

Sie sollten nur in der Lage, die verschiedenen Felder zu verwenden, in auf die gleiche Weise in der order_by Anruf.

+0

Vielen Dank. Gibt es einen einfachen Weg, dies für jede Liste anders zu machen, oder muss ich sie auseinander brechen und die Sortierung eins nach dem anderen vornehmen? –

2

Wenn die Listen klein sind, dann könnte man do it in python, Art verwenden und für jede Unterliste