Pergunta

Eu tenho modelos do Django que são listas de itens e quero os itens em cada lista para ter uma ordem de classificação em separado. Talvez da lista 1 irá classificar itens de linha por nome, lista 2 por data e lista 3 por prioridade.

Os modelos de aparência mais ou menos assim:

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)

Agora eu estou usando esta consulta na minha opinião:

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

Eu li exemplos que implica que eu poderia fazer algo parecido com isto:

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

Assumindo que trabalhou, ele me daria uma coleção de listas com uma ordem de classificação idêntica para cada lote de itens. Como eu iria sobre como classificar itens relacionados de cada lista individual de forma diferente?

Foi útil?

Solução

A sintaxe para ordenação através modelos relacionados é o mesmo formato de duplo sublinhado como para filter, de modo que você pode fazer:

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

Você deve apenas capaz de usar os diferentes campos da mesma forma na chamada order_by.

Outras dicas

Se as listas são pequenas, então você pode fazê-lo em python , usando classificar e marcação

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

Caso contrário, lançar uma consulta para cada sub-list

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top