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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top