Pregunta

He Django modelos que son listas de elementos y quiero que los elementos de cada lista para tener un orden.Tal vez lista 1 tipo de línea de los elementos por nombre, lista 2 por la fecha, y de la lista 3 por prioridad.

Los modelos que se ve más o menos como este:

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)

Ahora mismo estoy usando esta consulta, en mi opinión:

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

He leído los ejemplos que implica que yo podría hacer algo como esto:

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

Suponiendo que funcionaba, me daba la colección de listas con idéntico criterio de ordenación para cada lote de artículos.Cómo se podría ir sobre la clasificación de cada individuo de la lista de elementos relacionados de manera diferente?

¿Fue útil?

Solución

La sintaxis para ordenar a través de modelos relacionados es el mismo formato de doble guión bajo como para filter, por lo que puede hacer:

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

Usted sólo debe poder utilizar los diferentes campos de la misma manera en la llamada order_by.

Otros consejos

Si las listas son pequeños, entonces usted podría hacerlo en python, el uso de ordenar y etiquetar

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

De lo contrario, pondremos en marcha una consulta para cada sub-lista

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top