Django Form ChoiceField range (): объект 'int' не повторяется - PullRequest
6 голосов
/ 06 ноября 2011
from django import forms

class SignUpForm(forms.Form):
    birth_day = forms.ChoiceField(choices=range(1,32))

Я получаю «Пойманный TypeError при рендеринге: объект 'int' не повторяется".https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices говорит, что аргумент choices принимает итерации, такие как список или кортеж.

http://docs.python.org/library/functions.html#range говорит, что range () создает список.

Почему я получаю ошибку?

Я пытался преобразовать список в str с помощью map ()но получил разные ошибки.

Ответы [ 2 ]

16 голосов
/ 06 ноября 2011

... говорит, что аргумент choices принимает такие итерации, как список или кортеж.

Нет, говорится, что требуется итерация из двух кортежей .

Итерация (например, список или кортеж) из двух кортежей для использования в качестве выбора для этого поля.

birth_day = forms.ChoiceField(choices=((str(x), x) for x in range(1,32)))
0 голосов
/ 17 ноября 2017

Вам нужно 2 кортежа. Используйте встроенную функцию zip для тех же 2 кортежей

from django import forms


class SignUpForm(forms.Form):

    birth_day = models.IntegerField(choices=list(zip(range(1, 32), range(1, 32))), unique=True)

Помните (1,32) создаст от 1 до 31!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...