Specificando Django Modello correlati Ordine
-
13-09-2019 - |
Domanda
Non ho modelli Django che sono elenchi di elementi e voglio le voci di ciascuna lista per avere un ordinamento separato. Forse lista 1 ordinerà voci per nome, lista 2 per data, e la lista 3 per priorità.
I modelli sembra più o meno in questo modo:
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)
In questo momento sto usando questa domanda a mio avviso:
lists = List.objects.filter(user=request.user)
return render_to_response('showlists.html', {'lists': lists })
Ho letto esempi che implica che avrei potuto fare qualcosa di simile:
lists = List.objects.filter(user=request.user).select_related().order_by("items.name")
Supponendo che ha funzionato, sarebbe darmi la raccolta delle liste con un ordinamento identico per ogni lotto di oggetti. Come potrei fare per l'ordinamento articoli affini di ogni singolo lista in modo diverso?
Soluzione
La sintassi per ordinare attraverso modelli correlati è lo stesso formato di doppia sottolineatura come per filter
, in modo da poter fare:
List.objects.filter(user=request.user).select_related().order_by("listitems__name")
Si dovrebbe solo in grado di utilizzare i diversi campi nello stesso modo nella chiamata order_by
.
Altri suggerimenti
Se le liste sono piccoli, allora si potrebbe farlo in python , utilizzando ordinamento e codifica
list = <...code to get sublist here ...>
list.sort(key=lambda x: x.due_date) #sort by due date, say
In caso contrario, dare il via una query per ogni sotto-list