2009-06-09 9 views
2

J'ai des modèles Django qui sont des listes d'éléments et je souhaite que les éléments de chaque liste aient un ordre de tri séparé. Peut-être que la liste 1 triera les éléments de ligne par nom, la liste 2 par date et la liste 3 par priorité.Spécification de l'ordre de tri du modèle associé à Django

Les modèles ressemble plus ou moins comme ceci:

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) 

En ce moment je suis en utilisant cette requête à mon avis:

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

J'ai lu des exemples qui impliquent que je pouvais faire quelque chose comme ceci:

lists = List.objects.filter(user=request.user).select_related().order_by("items.name") 

En supposant que cela fonctionne, il me donnerait la collection de listes avec un identique ordre de tri pour chaque lot d'articles. Comment procéder pour trier différemment les éléments associés à chaque liste?

Répondre

3

La syntaxe de commande dans les modèles connexes est le même format double underscore comme pour filter, de sorte que vous pouvez faire:

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

vous devriez juste pouvoir utiliser les différents domaines de la même manière dans l'appel order_by.

+0

Merci. Existe-t-il un moyen facile de le faire différemment pour chaque liste ou devrais-je les séparer et gérer le tri un par un? –

2

Si les listes sont petites, alors vous pourriez do it in python, en utilisant tri et de marquage

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

coup de pied Sinon, hors une requête pour chaque sous-liste