Django Number Choices

Eu sei que o título pode ser enganoso, mas há algumas situações em que você deseja que o choicesde um Modelo de ChoiceFieldseja 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 rangeque 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 zipfunção não recebe uma lista, mas cada lista como um único argumento, descompactamos nossa lista com o *e pronto.