La Especificación De Django Relacionados Con El Modelo De Orden
-
13-09-2019 - |
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?
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