Eu sei que o título pode ser enganoso, mas há algumas situações em que você deseja que o choices
de um Modelo de ChoiceField
seja um intervalo específico de números.
Como o Django espera um iterável consistindo em iteráveis de exatamente dois itens (por exemplo [[1, 1] , [2, 2]]
), não podemos simplesmente fornecer um range
.
Comecemos pelo princípio, aqui está a solução (bem, uma das muitas):
choices=zip(*[range(start, end + 1)] * 2)
Deixe-me explicar: em primeiro lugar, há o range
que queremos converter de [1, 2, ... n]
para [[1, 1], [2, 2], ... [n, n]]
. Então, ‘duplicamos’ a lista (bem, criamos uma referência) multiplicando-a por 2, tornando-nos efetivamente [[1, 2, ... n], [1, 2, ... n]]
.
Uma vez que a zip
função não recebe uma lista, mas cada lista como um único argumento, descompactamos nossa lista com o *
e pronto.